home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / utils / the_acc.lzh / theacc.mod < prev    next >
Text File  |  1988-04-23  |  85KB  |  2,618 lines

  1.  
  2. MODULE TRYIT;
  3. (*$S-,$T-*)
  4. FROM AESApplications IMPORT ApplInitialise;
  5. FROM AESResources IMPORT ResourceLoad,ResourceGetAddr;
  6. FROM SYSTEM IMPORT ADDRESS,ADR,CODE,BYTE,NULL,REGISTER,SETREG;
  7. FROM AESForms IMPORT FormDo,FormCenter,FormAlert,FormDialogue;
  8. FROM AESObjects IMPORT ObjectDraw,ObjectOffset,ObjectChange,
  9.                        ObjectFind;
  10. FROM AESGraphics IMPORT GrafDragBox,GrafMouseKeyboardState,GrafGrowBox,
  11.                         GrafShrinkBox;
  12. FROM GEMAESbase IMPORT Object,TEdInfo,Arrow,HourGlass,AESCallResult,
  13.                        MesageEvent;
  14. FROM BIOS IMPORT DriveMap,DriveSet,BPB,BPBPtr,GetBPB,RW,RWAbs,BCosStat,
  15.                  Device;
  16. FROM XBIOS IMPORT FloppyFormat,FloppyWrite,PrototypeBootSector,SuperExec,
  17.                   FloppyRead,GetResolution;
  18. FROM InOut IMPORT WriteString,WriteLn,WriteInt,WriteCard,OpenOutputFile;
  19. IMPORT Terminal;
  20. IMPORT GEMDOS;
  21. FROM Strings IMPORT String,Length,Concat,Compare,CompareResults,Insert,
  22.                     Delete,Pos,Copy;
  23. FROM AESGraphics IMPORT GrafMouse;
  24. FROM LongInOut IMPORT WriteLongCard;
  25. FROM M2Conversions IMPORT ConvertReal,ConvertInteger,ConvertCardinal,
  26.                           ConvertToInteger,ConvertAddrDec;
  27. FROM AESWindows IMPORT WindowCreate,WindowOpen,WindowClose,WindowDelete;
  28. FROM AESEvents IMPORT EventMultiple;
  29. FROM AESMenus IMPORT MenuRegister;
  30. FROM Conversions IMPORT ConvertToString;
  31.  
  32. CONST
  33.         tree1    = 0;   (* form/dialog *)
  34.         dialogbx = 1;   (* BOX in tree TREE1 *)
  35.         fpath    = 2;   (* BOXTEXT in tree TREE1 *)
  36.         fup      = 3;   (* BOXTEXT in tree TREE1 *)
  37.         fwind    = 4;   (* BOX in tree TREE1 *)
  38.         fname2   = 5;   (* TEXT in tree TREE1 *)
  39.         fname3   = 6;   (* TEXT in tree TREE1 *)
  40.         fname4   = 7;   (* TEXT in tree TREE1 *)
  41.         fname5   = 8;   (* TEXT in tree TREE1 *)
  42.         fname6   = 9;   (* TEXT in tree TREE1 *)
  43.         fname7   = 10;  (* TEXT in tree TREE1 *)
  44.         fname8   = 11;  (* TEXT in tree TREE1 *)
  45.         fname9   = 12;  (* TEXT in tree TREE1 *)
  46.         fname10  = 13;  (* TEXT in tree TREE1 *)
  47.         fname11  = 14;  (* TEXT in tree TREE1 *)
  48.         fname12  = 15;  (* TEXT in tree TREE1 *)
  49.         fname13  = 16;  (* TEXT in tree TREE1 *)
  50.         fntrack  = 17;  (* BOX in tree TREE1 *)
  51.         fnslider = 18;  (* BOX in tree TREE1 *)
  52.         ftofile  = 20;  (* BOXTEXT in tree TREE1 *)
  53.         ftoname  = 21;  (* FTEXT in tree TREE1 *)
  54.         drivea   = 22;  (* BOXTEXT in tree TREE1 *)
  55.         driveb   = 23;  (* BOXTEXT in tree TREE1 *)
  56.         drivec   = 24;  (* BOXTEXT in tree TREE1 *)
  57.         drived   = 25;  (* BOXTEXT in tree TREE1 *)
  58.         drivee   = 26;  (* BOXTEXT in tree TREE1 *)
  59.         drivef   = 27;  (* BOXTEXT in tree TREE1 *)
  60.         driveg   = 28;  (* BOXTEXT in tree TREE1 *)
  61.         driveh   = 29;  (* BOXTEXT in tree TREE1 *)
  62.         drivei   = 30;  (* BOXTEXT in tree TREE1 *)
  63.         drivej   = 31;  (* BOXTEXT in tree TREE1 *)
  64.         drivek   = 32;  (* BOXTEXT in tree TREE1 *)
  65.         drivel   = 33;  (* BOXTEXT in tree TREE1 *)
  66.         drivem   = 34;  (* BOXTEXT in tree TREE1 *)
  67.         driven   = 35;  (* BOXTEXT in tree TREE1 *)
  68.         driveo   = 36;  (* BOXTEXT in tree TREE1 *)
  69.         drivep   = 37;  (* BOXTEXT in tree TREE1 *)
  70.         printbx  = 38;  (* BOX in tree TREE1 *)
  71.         fprint   = 39;  (* BOXTEXT in tree TREE1 *)
  72.         fall     = 40;  (* BOXTEXT in tree TREE1 *)
  73.         fnone    = 41;  (* BOXTEXT in tree TREE1 *)
  74.         fdown    = 42;  (* BOXTEXT in tree TREE1 *)
  75.         drvfree  = 43;  (* BOXTEXT in tree TREE1 *)
  76.         frspc    = 44;  (* BOXTEXT in tree TREE1 *)
  77.         folderbx = 45;  (* BOX in tree TREE1 *)
  78.         ferase   = 47;  (* BOXTEXT in tree TREE1 *)
  79.         fcreate  = 48;  (* BOXTEXT in tree TREE1 *)
  80.         fldok    = 49;  (* BOXTEXT in tree TREE1 *)
  81.         finfobx  = 50;  (* BOX in tree TREE1 *)
  82.         fbytes   = 51;  (* BOXTEXT in tree TREE1 *)
  83.         fro      = 52;  (* BOXTEXT in tree TREE1 *)
  84.         fdate    = 53;  (* FBOXTEXT in tree TREE1 *)
  85.         frw      = 54;  (* BOXTEXT in tree TREE1 *)
  86.         ftime    = 55;  (* FBOXTEXT in tree TREE1 *)
  87.         fset     = 56;  (* BOXTEXT in tree TREE1 *)
  88.         filename = 57;  (* FBOXTEXT in tree TREE1 *)
  89.         finfo    = 58;  (* BOXTEXT in tree TREE1 *)
  90.         mainexit = 59;  (* BOXTEXT in tree TREE1 *)
  91.         fileopts = 60;  (* BOX in tree TREE1 *)
  92.         filedlg  = 61;  (* BOX in tree TREE1 *)
  93.         cpyoptns = 62;  (* BOXTEXT in tree TREE1 *)
  94.         cpyfile  = 64;  (* BOXTEXT in tree TREE1 *)
  95.         cpydisk  = 65;  (* BOXTEXT in tree TREE1 *)
  96.         cpycopy  = 66;  (* BOXTEXT in tree TREE1 *)
  97.         cpycancl = 67;  (* BOXTEXT in tree TREE1 *)
  98.         cpyscr   = 69;  (* BOXTEXT in tree TREE1 *)
  99.         cpydst   = 70;  (* BOXTEXT in tree TREE1 *)
  100.         verify   = 71;  (* BOXTEXT in tree TREE1 *)
  101.         options  = 72;  (* BOXTEXT in tree TREE1 *)
  102.         erase    = 74;  (* BOXTEXT in tree TREE1 *)
  103.         formatbx = 75;  (* BOX in tree TREE1 *)
  104.         format   = 76;  (* BOXTEXT in tree TREE1 *)
  105.         fdrva    = 78;  (* BOXTEXT in tree TREE1 *)
  106.         fdrvb    = 79;  (* BOXTEXT in tree TREE1 *)
  107.         fspt     = 80;  (* BOXTEXT in tree TREE1 *)
  108.         fss      = 82;  (* BOXTEXT in tree TREE1 *)
  109.         fdd      = 83;  (* BOXTEXT in tree TREE1 *)
  110.         slidebox = 84;  (* BOX in tree TREE1 *)
  111.         ftrack   = 85;  (* BOX in tree TREE1 *)
  112.         fslider  = 86;  (* BOX in tree TREE1 *)
  113.         tree3    = 1;   (* form/dialog *)
  114.         errdlg   = 0;   (* BOX in tree TREE3 *)
  115.         cfdest   = 1;   (* FTEXT in tree TREE3 *)
  116.         cfok     = 2;   (* BUTTON in tree TREE3 *)
  117.         cfcancel = 3;   (* BUTTON in tree TREE3 *)
  118.         tree2    = 2;   (* form/dialog *)
  119.         cpydlg   = 0;   (* BOX in tree TREE2 *)
  120.         cpyatob  = 1;   (* BOXTEXT in tree TREE2 *)
  121.         cpyok    = 2;   (* BUTTON in tree TREE2 *)
  122.         cpybtoa  = 3;   (* BOXTEXT in tree TREE2 *)
  123.         cpyexit  = 4;   (* BUTTON in tree TREE2 *)
  124.         cpyslide = 6;   (* IBOX in tree TREE2 *)
  125.         dsttrack = 7;   (* BOX in tree TREE2 *)
  126.         dstslide = 8;   (* BOX in tree TREE2 *)
  127.         scrtrack = 9;   (* BOX in tree TREE2 *)
  128.         scrslide = 10;  (* BOX in tree TREE2 *)
  129.         tree4    = 3;   (* form/dialog *)
  130.         optdlg   = 0;   (* BOX in tree TREE4 *)
  131.         cpyyes   = 2;   (* BUTTON in tree TREE4 *)
  132.         cpyno    = 3;   (* BUTTON in tree TREE4 *)
  133.         dltyes   = 5;   (* BUTTON in tree TREE4 *)
  134.         dltno    = 6;   (* BUTTON in tree TREE4 *)
  135.         conok    = 7;   (* BUTTON in tree TREE4 *)
  136.         concancl = 8;   (* BUTTON in tree TREE4 *)
  137.         tree5    = 4;   (* form/dialog *)
  138.         copydlg  = 0;   (* BOX in tree TREE5 *)
  139.         numtocpy = 3;   (* TEXT in tree TREE5 *)
  140.         condlgok = 4;   (* BUTTON in tree TREE5 *)
  141.         condlgcl = 5;   (* BUTTON in tree TREE5 *)
  142.         tree6    = 5;   (* form/dialog *)
  143.         dltdlg   = 0;   (* BOX in tree TREE6 *)
  144.         numtodlt = 3;   (* TEXT in tree TREE6 *)
  145.         dltdlgok = 4;   (* BUTTON in tree TREE6 *)
  146.         dltdlgcl = 5;   (* BUTTON in tree TREE6 *)
  147.  
  148.         Normal = 0;
  149.         selected = 1;
  150.         disabled = 8;
  151.         RTS = 04E75H;
  152.         stacksize = 4096;
  153.  
  154. TYPE
  155.   
  156.   PTRTOTEDINFO = POINTER TO TEdInfo;
  157.   etree = POINTER TO TEdInfo;
  158.   objtree = RECORD
  159.               next : INTEGER;
  160.               head : INTEGER;
  161.               tail : INTEGER;
  162.               type : INTEGER;
  163.               flags : INTEGER;
  164.               state : INTEGER;
  165.               spec : etree;
  166.               x  : INTEGER;
  167.               y : INTEGER;
  168.               width :INTEGER;
  169.               height : INTEGER;
  170.             END;
  171.   
  172.   bootsectortype = RECORD
  173.                      bbi     : CARDINAL;
  174.                      loader  : ARRAY[0..5] OF CHAR;
  175.                      snum    : ARRAY[0..2] OF CHAR;
  176.                      bps     : CARDINAL;
  177.                      spc     : CARDINAL;
  178.                      res     : CARDINAL;
  179.                      fat     : CHAR;
  180.                      dir     : CARDINAL;
  181.                      sec     : CARDINAL;
  182.                      media   : CARDINAL;
  183.                      spf     : CARDINAL;
  184.                      spt     : CARDINAL;
  185.                      filler1 : ARRAY[0..5] OF CHAR;
  186.                      side    : CARDINAL;
  187.                      hid     : CARDINAL;
  188.                      filler2 : ARRAY[0..479] OF CHAR;
  189.                      check   : CARDINAL;
  190.                   END;             
  191.  
  192.   Tree = POINTER TO ARRAY[1..300] OF objtree;
  193.   objstate = (Selected);
  194.   
  195.   str = ARRAY[1..80] OF CHAR;
  196.   
  197.   pathrecord = RECORD
  198.                 reserved : ARRAY[0..20] OF BYTE;
  199.                 attrib   : BYTE;
  200.                 time     : CARDINAL;
  201.                 date     : CARDINAL;
  202.                 size     : LONGCARD;
  203.                 name     : String;
  204.                END;
  205.  
  206.     nametype = ARRAY[1..500] OF  String;
  207.     oned = ARRAY[1..500] OF INTEGER;
  208.     twod = ARRAY[1..500],[1..2] OF INTEGER;
  209.     
  210. VAR 
  211.   tree1ptr,tree2ptr,tree3ptr,tree4ptr,tree5ptr,tree6ptr,
  212.   obtedinfo,treeaddr : Tree;
  213.   handle,x,y,w,h,xx,yy,ww,hh,showit,disktype,execflag,result,oldyoff,
  214.   nine,vint,ccount,index,fcount,fnslidery,fnsliderh,fntrackh
  215.   ,th,sh,fnametemp,ii,newwind,menuid,apid,event,dummy,cresult
  216.    ,fileselection,foundit,resolution : INTEGER;
  217.   
  218.   bootsector : ARRAY[0..511] OF CHAR;
  219.   
  220.   selection : POINTER TO String;       
  221.   
  222.   vobspec,gobspec : etree;
  223.   
  224.   pbuffer : ARRAY[0..7] OF CARDINAL;
  225.   
  226.   stack : ARRAY[1..4096] OF CARDINAL;
  227.            
  228.   d : [0..31];
  229.   drv : DriveSet;
  230.   buffer,ptextaddr,bufferaddr,freememory : ADDRESS;
  231.   loaded,done,initialized,therewasanerror,confirmcopy,confirmdlt,
  232.   clearfirst : BOOLEAN;
  233.   errorstring : ARRAY[0..100] OF CHAR;
  234.   drive,spt,interleave,virgin,
  235.   defaultdrive,numberofsides,tracksperdisk,sectorspertrack,count,
  236.   ct,year,month,ryear,hour,minute,rhour,day,appldrive : CARDINAL;
  237.   dtarecord : pathrecord;  
  238.   selobspec : etree;
  239.  
  240.   writeverify [0444H] : BYTE;
  241.   verifyflag,defaultverify : BYTE;
  242.   
  243.   swidth,tswidth,ttswidth : REAL;
  244.  
  245.   free,drivemap,tsize,Count,sizebuffer : LONGCARD;
  246.   path,rpath,temp,temp2 : ARRAY[0..300] OF String;
  247.   atrib : ARRAY[0..100] OF CARDINAL;
  248.   
  249.   farray,match,rfarray,r1,r2,r3,r4,temp1,result2
  250.   ,p1,p2,p3,p4,ffpath,ppath,Temp1,Temp2,Temp3,filearray,
  251.   globlepath,clear,ptextstr,
  252.   clearstr,currentname,newname,presult,pathdrive,
  253.   hourstr,minutestr,rhourstr,rminutestr,timestr,yearstr,monthstr,
  254.   daystr,datestr,modystr,mresultstr,tresultstr,rdaystr,pathstr : String;
  255.   sourcename,destname,sourcepathstr,accname,fffpath,freestr,
  256.   gverifystr,selpathstr : String;
  257.  
  258.   i1,i,j,j1,k,p,t : INTEGER;
  259.   s : BOOLEAN;
  260.   n : oned;
  261.   s9 : twod;
  262.  
  263. PROCEDURE MakeCardinal(a,b : CHAR) : CARDINAL;
  264.  
  265. VAR
  266.    aa,bb : CARDINAL;
  267.    
  268. BEGIN
  269.    aa := CARDINAL(a);
  270.    bb := CARDINAL(b);
  271.    RETURN (CARDINAL(a) + CARDINAL(b) * 256);
  272. END MakeCardinal;
  273.    
  274. PROCEDURE ClearIt;
  275.  
  276.  
  277. VAR
  278.    fromobspec,bobspec,tobspec,dobspec : etree;
  279.    bytesstr,timestr,datestr,pathstr : String;
  280.    selection : POINTER TO String;
  281.    blank : String;
  282.    where : CARDINAL;
  283.  
  284. BEGIN
  285.   IF (initialized) AND NOT (GetObjectState(tree1,cpyfile,Selected)) THEN
  286.     blank := ''; 
  287.     tree1ptr^[ftoname + 1].spec^.ptext := ADR(blank);
  288.     tree1ptr^[filename + 1].spec^.ptext := ADR(blank);
  289.     ObjectDraw(tree1ptr,ftoname,1,x,y,w,h);
  290.     ObjectDraw(tree1ptr,filename,1,x,y,w,h);
  291.     bytesstr := '000000';
  292.     datestr := '000000';
  293.     timestr := '0000  ';
  294.     tree1ptr^[fbytes + 1].spec^.ptext := ADR(bytesstr);
  295.     tree1ptr^[fdate + 1].spec^.ptext := ADR(datestr);
  296.     tree1ptr^[ftime + 1].spec^.ptext := ADR(timestr);
  297.     ObjectDraw(tree1ptr,fbytes,1,x,y,w,h);
  298.     ObjectDraw(tree1ptr,fdate,1,x,y,w,h);
  299.     ObjectDraw(tree1ptr,ftime,1,x,y,w,h);
  300.     ObjectChange(tree1ptr,fro,0,x,y,w,h,Normal,1);
  301.     ObjectChange(tree1ptr,frw,0,x,y,w,h,Normal,0);
  302.     ObjectDraw(tree1ptr,frw,1,x,y,w,h);
  303.     ObjectChange(tree1ptr,fset,0,x,y,w,h,disabled,1);
  304.     clearfirst := TRUE;
  305.   ELSE
  306.     selection := tree1ptr^[ftoname + 1].spec^.ptext;
  307.     pathstr := selection^;
  308.     IF (Pos(pathstr,'*.',0,where) AND (clearfirst)) THEN     
  309.     tree1ptr^[ftoname + 1].spec^.ptext := ADR(pathstr);
  310.     clearfirst := FALSE;END;
  311.   END;
  312. END ClearIt;
  313.  
  314. PROCEDURE ChecktheState(tree,index : INTEGER) : BITSET;
  315.  
  316. VAR
  317.   treeaddr : Tree;
  318.  
  319. BEGIN
  320.   ResourceGetAddr(0,tree,treeaddr);
  321.   RETURN BITSET(treeaddr^[index + 1].state);
  322. END ChecktheState;
  323.    
  324. PROCEDURE GetObjectState(tree,index : INTEGER ; mask : objstate) : BOOLEAN;
  325.  
  326. TYPE
  327.    state = SET OF objstate;
  328.  
  329. VAR
  330.   value : BITSET;
  331.     
  332. BEGIN
  333.   ResourceGetAddr(0,tree1,tree1ptr);
  334.   value := ChecktheState(tree,index);
  335.   RETURN (mask IN state(value));
  336.  
  337. END GetObjectState;  
  338.  
  339. PROCEDURE CalcSliderSize;
  340.  
  341. BEGIN
  342.    th := tree1ptr^[fntrack + 1].height;
  343.    
  344.   IF ii < 12 THEN
  345.      tree1ptr^[fnslider + 1].height := th;
  346.   ELSE
  347.      swidth := FLOAT(CARDINAL(th))/FLOAT(CARDINAL(ii));
  348.      swidth := swidth * 12.0;
  349.      ttswidth := swidth;
  350.      IF swidth < 5.00 THEN
  351.         tree1ptr^[fnslider + 1].height := 5;
  352.         swidth := swidth/12.0;
  353.      ELSE
  354.         tree1ptr^[fnslider + 1].height := INTEGER(TRUNC(swidth));
  355.         swidth := swidth/12.0;
  356.      END;
  357.      sh := tree1ptr^[fnslider + 1].height;   
  358.   END; (* IF ELSE *)
  359.   tree1ptr^[fnslider + 1].y := 0;
  360.   IF initialized THEN ObjectDraw(tree1ptr,fntrack,1,x,y,w,h);END;
  361. END CalcSliderSize;
  362.   
  363. PROCEDURE updateslider(tree,index :INTEGER; treeaddr:Tree);
  364.  
  365. VAR
  366.   curx,curw : INTEGER;
  367.   
  368. BEGIN
  369.   curx := tree1ptr^[fslider + 1].x;
  370.   curw := tree1ptr^[fslider + 1].width;
  371.   curx := curx + 1;
  372.   curw := curw - 1;
  373.   tree1ptr^[fslider + 1].x := curx;
  374.   tree1ptr^[fslider + 1].width := curw;
  375.   ObjectDraw(tree1ptr,ftrack,1,x,y,w,h);
  376.   ObjectDraw(tree1ptr,fslider,1,x,y,w,h);
  377. END updateslider;
  378.   
  379. PROCEDURE Bootsector;
  380.  
  381. VAR
  382.   bootsector : ARRAY[0..511] OF CHAR;
  383.   sec,sec2,spt : CARDINAL;
  384.   serialno : LONGINT;
  385.   disktype,execflag,result : INTEGER;
  386.   side,track,sector,count : CARDINAL;
  387.   buffer : ADDRESS;
  388.     
  389. BEGIN
  390.   serialno := 00FFFFFFEH;
  391.   side := 0;
  392.   execflag := 0;
  393.   track := 0;
  394.   sector := 1;
  395.   count := 1;
  396.   buffer := ADR(bootsector);
  397.   IF GetObjectState(tree1,fdd,Selected) THEN
  398.      disktype := 3;
  399.      IF tracksperdisk = 79 THEN
  400.         sec := 160;
  401.         sec2 := 5;
  402.      ELSE   
  403.         sec := 104;
  404.         sec2 := 6;
  405.      END;   
  406.   ELSE
  407.      disktype := 2;
  408.      IF tracksperdisk = 79 THEN
  409.         sec := 208;
  410.         sec2 := 2;
  411.      ELSE   
  412.         sec := 52;
  413.         sec2 := 3;
  414.      END;   
  415.   END;
  416.  
  417.   PrototypeBootSector(buffer,serialno,disktype,execflag);
  418.   bootsector[24] := CHAR(sectorspertrack);
  419.   bootsector[19] := CHAR(sec);
  420.   bootsector[20] := CHAR(sec2);
  421.   buffer := ADR(bootsector);
  422.   result := FloppyWrite(buffer,drive,sector,track,side,count);
  423.   GrafMouse(Arrow,NIL);
  424. END Bootsector;  
  425.                     
  426.  
  427.                     
  428. PROCEDURE Formatdisk(tree,index : INTEGER; treeaddr:Tree);
  429.  
  430. VAR
  431.   defaultx,defaultwidth,result : INTEGER;
  432.   thestring,errorstr : String;
  433.   spt,track,side,interleave,virgin : CARDINAL;
  434.   buffer : ADDRESS;
  435.   
  436. BEGIN
  437.   showit := FormAlert(1,"[2][All the contents of the disk|will be ERASED, do you wish|to continue?][ CANCEL | OK ]");
  438.   IF showit # 1 THEN
  439.      IF GetObjectState(tree1,fdrva,Selected) THEN drive := 0 ELSE
  440.                        drive := 1; END;
  441.      spt := sectorspertrack;
  442.      track := 0;
  443.      side := 0;
  444.      interleave := 1;
  445.      virgin := 000H;
  446.      GEMDOS.Alloc(10000,buffer);
  447.      defaultx := treeaddr^[index + 1].x;
  448.      defaultwidth := treeaddr^[index + 1].width;
  449.      GrafMouse(HourGlass,NIL);
  450.      LOOP
  451.        result := FloppyFormat(buffer,drive,spt,track,side,interleave,virgin);
  452.        IF GetObjectState(tree1,fdd,Selected) THEN
  453.           side := 1;
  454.           virgin := 0E5E5H;
  455.           result := FloppyFormat(buffer,drive,spt,track,side,interleave,virgin);      IF track < 2 THEN virgin := 000H; END;
  456.           side := 0;
  457.        END;
  458.        IF (result < 0) OR (track = tracksperdisk) THEN EXIT ; END;
  459.        INC(track);
  460.        updateslider(tree,index,treeaddr);
  461.        IF track > 1 THEN virgin := 0E5E5H; END;
  462.      END; (* LOOP *)
  463.      IF result < 0 THEN
  464.         CASE result OF
  465.             -13 : errorstring := "[1][Disk is WRITE|protected! ][ OK ]"|
  466.             -16 : errorstring := "[1][An error occured|during format! ][ OK ]";
  467.         END; (* CASE *)
  468.         showit := FormAlert(1,errorstring);
  469.      END;      
  470.      treeaddr^[index + 1].x := defaultx;
  471.      treeaddr^[index + 1].width := defaultwidth;
  472.      ObjectDraw(tree1ptr,fslider,1,x,y,w,h);
  473.      done := GEMDOS.Free(buffer);
  474.      IF result >= 0 THEN Bootsector; END;
  475.   END;
  476.   ObjectChange(tree1ptr,format,0,x,y,w,h,Normal,1);
  477. END Formatdisk;  
  478.  
  479. PROCEDURE ConvertDateTime(date,time : CARDINAL);
  480.  
  481. BEGIN
  482.        year := (date DIV 512) + 80;
  483.        ryear := date MOD 512;
  484.        month := ryear DIV 32;
  485.        day := ryear MOD 32;
  486.        ConvertToString(LONGCARD(year),10,FALSE,yearstr,done);
  487.        ConvertToString(LONGCARD(month),10,FALSE,monthstr,done);
  488.        ConvertToString(LONGCARD(day),10,FALSE,daystr,done);
  489.        IF (day < 10) AND (month < 10) THEN
  490.           Concat('0',monthstr,mresultstr);
  491.           monthstr := mresultstr;
  492.           Concat('0',daystr,rdaystr);
  493.           daystr := rdaystr;
  494.        ELSE
  495.           IF month < 10 THEN Concat('0',monthstr,mresultstr);
  496.           monthstr := mresultstr;END;
  497.           IF day < 10 THEN Concat('0',daystr,rdaystr);
  498.           daystr := rdaystr;END;      
  499.        END;
  500.        Concat(monthstr,daystr,modystr);
  501.        Concat(modystr,yearstr,datestr);
  502.        hour := time DIV 2048;
  503.        rhour := time MOD 2048;
  504.        minute := rhour DIV 32;
  505.        ConvertToString(LONGCARD(hour),10,FALSE,hourstr,done);
  506.        ConvertToString(LONGCARD(minute),10,FALSE,minutestr,done);
  507.        IF hour < 1 THEN
  508.           Delete(hourstr,0,1);
  509.           Concat('12',hourstr,rhourstr);
  510.           hourstr := rhourstr;
  511.        END;
  512.        IF (hour >= 1) AND (hour < 10) THEN
  513.           Concat(' ',hourstr,rhourstr);
  514.           hourstr := rhourstr;
  515.        END;
  516.        IF minute < 10 THEN
  517.           Concat('0',minutestr,rminutestr);
  518.           minutestr := rminutestr;
  519.        END;
  520.        Concat(hourstr,minutestr,timestr);
  521.        IF hour < 12 THEN
  522.           Concat(timestr,'A',tresultstr);
  523.        ELSE
  524.           Concat(timestr,'P',tresultstr);
  525.        END;
  526.        
  527. END ConvertDateTime;
  528.                
  529. PROCEDURE GetFreeSpace;
  530.  
  531. TYPE
  532.   diskinfo = GEMDOS.DiskInfoBuffer;
  533.   
  534. VAR
  535.   freeinfo : diskinfo;
  536.   drive : CARDINAL;
  537.   freestr : String;
  538.   obspec : etree;
  539.   
  540. BEGIN
  541.   IF GetObjectState(tree1,drivea,Selected) THEN drive := 1; END;
  542.   IF GetObjectState(tree1,driveb,Selected) THEN drive := 2; END;
  543.   IF GetObjectState(tree1,drivec,Selected) THEN drive := 3; END;
  544.   IF GetObjectState(tree1,drived,Selected) THEN drive := 4; END;
  545.   IF GetObjectState(tree1,drivee,Selected) THEN drive := 5; END;
  546.   IF GetObjectState(tree1,drivef,Selected) THEN drive := 6; END;
  547.   IF GetObjectState(tree1,driveg,Selected) THEN drive := 7; END;
  548.   IF GetObjectState(tree1,driveh,Selected) THEN drive := 8; END;
  549.   IF GetObjectState(tree1,drivei,Selected) THEN drive := 9; END;
  550.   IF GetObjectState(tree1,drivej,Selected) THEN drive := 10; END;
  551.   IF GetObjectState(tree1,drivek,Selected) THEN drive := 11; END;
  552.   IF GetObjectState(tree1,drivel,Selected) THEN drive := 12; END;
  553.   IF GetObjectState(tree1,drivem,Selected) THEN drive := 13; END;
  554.   IF GetObjectState(tree1,driven,Selected) THEN drive := 14; END;
  555.   IF GetObjectState(tree1,driveo,Selected) THEN drive := 15; END;
  556.   IF GetObjectState(tree1,drivep,Selected) THEN drive := 16; END;
  557.   GrafMouse(HourGlass,NIL);
  558.   GEMDOS.DFree(freeinfo,drive);
  559.   free := freeinfo.freeSpace * freeinfo.sectorSize * freeinfo.clusterSize;
  560.   IF NOT (GetObjectState(tree1,fprint,Selected) AND
  561.          (GetObjectState(tree1,cpyfile,Selected) AND
  562.          GetObjectState(tree1,cpycopy,Selected))) THEN
  563.      ConvertToString(LONGCARD(free),10,FALSE,freestr,done);    
  564.      tree1ptr^[frspc + 1].spec^.ptext := ADR(freestr);
  565.      ObjectDraw(tree1ptr,frspc,1,x,y,w,h);
  566.      GrafMouse(Arrow,NIL);
  567.      ObjectChange(tree1ptr,drvfree,0,x,y,w,h,Normal,1);
  568.   ELSE 
  569.    ConvertToString(LONGCARD(free),10,FALSE,freestr,done);
  570.    WriteString(freestr);
  571.    GrafMouse(Arrow,NIL);
  572.   END; 
  573. END GetFreeSpace;
  574.  
  575. (*$P-*)
  576. PROCEDURE SetVerifyOn;
  577.  
  578. BEGIN
  579.   writeverify := BYTE(-1);
  580.   CODE(RTS);
  581. END SetVerifyOn;
  582.  
  583. (*$P-*)
  584. PROCEDURE SetVerifyOff;
  585.  
  586. BEGIN
  587.   writeverify := BYTE(0);
  588.   CODE(RTS);
  589. END SetVerifyOff;  
  590.  
  591. (*$P-*)
  592. PROCEDURE GetVerifyFlag;
  593.  
  594. BEGIN
  595.    verifyflag := writeverify;
  596.    CODE(RTS);
  597. END GetVerifyFlag;
  598.  
  599. PROCEDURE DoVerify;
  600.  
  601.    
  602. VAR
  603.    verifystr : String;
  604.    obspec : etree;
  605.  
  606. BEGIN
  607.   IF vint = 0 THEN
  608.      verifystr  := 'WRITE VERIFY OFF ';
  609.      SuperExec(PROC(SetVerifyOff));
  610.      vint := -1
  611.   ELSE
  612.      verifystr := 'WRITE VERIFY ON ';
  613.      SuperExec(PROC(SetVerifyOn));
  614.      vint := 0;
  615.   END;
  616.   tree1ptr^[verify + 1].spec^.ptext := ADR(verifystr);
  617.   gverifystr := verifystr;
  618.   ObjectChange(tree1ptr,verify,0,x,y,w,h,Normal,1);
  619.   IF initialized THEN
  620.      ObjectDraw(tree1ptr,verify,1,x,y,w,h);END;
  621. END DoVerify;                
  622.  
  623. PROCEDURE BPBparameters(source,dest : BPB) : BOOLEAN;
  624.  
  625. BEGIN
  626.   IF source.recsiz <> dest.recsiz THEN RETURN(FALSE); END;
  627.   IF source.clsiz <> dest.clsiz THEN RETURN(FALSE); END;
  628.   IF source.clsizb <> dest.clsizb THEN RETURN(FALSE); END;
  629.   IF source.rdlen <> dest.rdlen THEN RETURN(FALSE); END;
  630.   IF source.fsiz <> dest.fsiz THEN RETURN(FALSE); END;
  631.   IF source.fatrec <> dest.fatrec THEN RETURN(FALSE); END;
  632.   IF source.datrec <> dest.datrec THEN RETURN(FALSE); END;
  633.   IF source.numcl <> dest.numcl THEN RETURN(FALSE); END;
  634.   IF source.bflags <> dest.bflags THEN RETURN(FALSE); END;
  635.   IF source.numcl > 500 THEN numberofsides := 2; 
  636.   ELSE numberofsides := 1;END;
  637.   RETURN(TRUE);
  638. END BPBparameters;
  639.   
  640. PROCEDURE DoCopy;
  641.  
  642. VAR
  643.    sourcedrv,destdrv : BPB;
  644.    sourceptr,destptr : BPBPtr;
  645.    source,dest,side,track,spt,bps,bside,sec,numberoftracks,
  646.    strack,dtrack,temp1,temp2,totaltracks : CARDINAL;
  647.    bufferaddr,baseaddr,addr,freememory,bootaddr : ADDRESS;
  648.    bytes,buffersize,bufferptr,endofbuffer : LONGCARD;
  649.    Done,reading,done : BOOLEAN;
  650.    curx,curw,scrdefx,scrdefw,dstdefx,dstdefw,snum,dnum,result : INTEGER;
  651.    obspec : etree;
  652.    sresult,dresult : String;
  653.         
  654. BEGIN
  655.   IF GetObjectState(tree2,cpyatob,Selected) THEN
  656.      source := 0;
  657.      dest := 1;
  658.   END;
  659.   IF GetObjectState(tree2,cpybtoa,Selected) THEN
  660.      dest := 0;
  661.      source := 1;
  662.   END;      
  663.   sourceptr := GetBPB(source);
  664.   destptr := GetBPB(dest);
  665.   ConvertAddrDec(sourceptr,2,sresult);
  666.   ConvertAddrDec(destptr,2,dresult);
  667.   ConvertToInteger(sresult,done,snum);
  668.   ConvertToInteger(dresult,done,dnum);
  669.   IF (snum # 0 ) AND (dnum # 0) THEN
  670.   sourcedrv := destptr^;
  671.   destdrv := sourceptr^;
  672.   IF NOT BPBparameters(sourcedrv,destdrv) THEN
  673.      showit := FormAlert(1,"[1][Disk Formats are|not the same!][ OK ]");
  674.      Done := FALSE;
  675.      RETURN;
  676.   END;
  677.   endofbuffer := 0;
  678.   bufferptr := 0;
  679.   bytes := 0;
  680.   bufferaddr := ADR(bufferptr);
  681.   GEMDOS.Alloc(0FFFFFFFFH,bufferaddr);
  682.   bytes := LONGCARD(bufferaddr);
  683.   bytes := bytes - 2000H;
  684.   bytes := (bytes DIV 512) * 512;
  685.   GEMDOS.Alloc(bytes,bufferaddr);
  686.   baseaddr := bufferaddr;
  687.   endofbuffer := LONGCARD(baseaddr) + bytes;
  688.   bootaddr := ADR(bootsector);
  689.   result := FloppyRead(bootaddr,0,1,0,0,1);
  690.   sec := MakeCardinal(bootsector[19],bootsector[20]);
  691.   bside := MakeCardinal(bootsector[26],bootsector[27]);
  692.   spt := MakeCardinal(bootsector[24],bootsector[25]);
  693.   numberoftracks := sec DIV spt;
  694.   IF numberoftracks > 82 THEN numberoftracks := numberoftracks DIV 2;END;
  695.   tree2ptr^[scrtrack + 1].width := numberoftracks + 2;
  696.   tree2ptr^[scrslide + 1].width := numberoftracks;
  697.   tree2ptr^[scrslide + 1].x := (tree2ptr^[scrtrack + 1].x) + 1;
  698.   tree2ptr^[dsttrack + 1].width := numberoftracks + 2;
  699.   tree2ptr^[dstslide + 1].width := numberoftracks;
  700.   tree2ptr^[dstslide + 1].x := (tree2ptr^[dsttrack + 1].x) + 1;
  701.   ObjectDraw(tree2ptr,cpyslide,3,x,y,w,h);
  702.   bps := 512;
  703.   totaltracks := 0;
  704.   temp1 := 0;
  705.   temp2 := 0;
  706.   side := 0;
  707.   strack := 0;
  708.   dtrack := 0;
  709.   reading := TRUE;
  710.   bufferptr := LONGCARD(baseaddr);
  711.   scrdefx := tree2ptr^[scrslide + 1].x;
  712.   scrdefw := tree2ptr^[scrslide + 1].width;
  713.   dstdefx := tree2ptr^[dstslide + 1].x;
  714.   dstdefw := tree2ptr^[dstslide + 1].width;
  715.   GrafMouse(HourGlass,NIL);
  716.   LOOP 
  717.     IF reading THEN
  718.        result := FloppyRead(bufferaddr,source,1,strack,side,spt);
  719.        IF side = 0 THEN
  720.           curx := tree2ptr^[scrslide + 1].x;
  721.           curw := tree2ptr^[scrslide + 1].width;
  722.           INC(curx);
  723.           DEC(curw);
  724.           tree2ptr^[scrslide + 1].x := curx;
  725.           tree2ptr^[scrslide + 1].width := curw;
  726.           ObjectDraw(tree2ptr,scrtrack,1,x,y,w,h);
  727.           ObjectDraw(tree2ptr,scrslide,1,x,y,w,h);
  728.        END;    
  729.     ELSE
  730.       REPEAT 
  731.        result := FloppyWrite(bufferaddr,dest,1,dtrack,side,spt);
  732.        IF result < 0 THEN
  733.           showit := FormAlert(1, "[1][ Disk Is Write Protected!][ Retry | Cancel ]");
  734.           CASE showit OF
  735.                2  : result := -1;
  736.           END;  
  737.        END;
  738.       UNTIL (result >= 0) OR (result = -1);
  739.        IF (side = 0) AND (result >= 0) THEN
  740.           curx := tree2ptr^[dstslide + 1].x;
  741.           curw := tree2ptr^[dstslide + 1].width;
  742.           INC(curx);
  743.           DEC(curw);
  744.           tree2ptr^[dstslide + 1].x := curx;
  745.           tree2ptr^[dstslide + 1].width := curw;
  746.           ObjectDraw(tree2ptr,dsttrack,1,x,y,w,h);
  747.           ObjectDraw(tree2ptr,dstslide,1,x,y,w,h);
  748.        END;   
  749.     END;
  750.     IF (side = 0) AND (bside = 2) THEN
  751.        side := 1;
  752.     ELSE   
  753.        INC(totaltracks);
  754.        IF reading THEN INC(strack);
  755.        ELSE INC(dtrack);END;
  756.        side := 0;
  757.     END;
  758.     IF (side = 0) AND (totaltracks = numberoftracks) AND (NOT reading)
  759.       OR (result < 0) THEN EXIT; END;
  760.     bufferptr := bufferptr + LONGCARD(spt * bps);
  761.     bufferaddr := ADDRESS(bufferptr);
  762.     IF (bufferptr > endofbuffer) OR
  763.        ((side = 0) AND (totaltracks = numberoftracks)) THEN
  764.        temp1 := totaltracks;
  765.        totaltracks := temp2;
  766.        temp2 := temp1;
  767.        reading := NOT reading;
  768.        bufferaddr := baseaddr;
  769.        bufferptr := LONGCARD(bufferaddr);
  770.     END;
  771.   END; (* LOOP *)
  772.   GrafMouse(Arrow,NIL);           
  773.   tree2ptr^[scrslide + 1].x := scrdefx;
  774.   tree2ptr^[scrslide + 1].width := scrdefw;
  775.   tree2ptr^[dstslide + 1].x := dstdefx;
  776.   tree2ptr^[dstslide + 1].width := dstdefw;
  777.   ObjectDraw(tree2ptr,scrslide,1,x,y,w,h);
  778.   ObjectDraw(tree2ptr,dstslide,1,x,y,w,h);
  779.   Done := GEMDOS.Free(baseaddr);
  780.   Done := TRUE;
  781.   END; (* IF sourceptr and destptr *)
  782. END DoCopy;
  783.         
  784. PROCEDURE CopyDialog;
  785.  
  786. VAR
  787.  xoff,yoff,bx,by,bw,bh,stw,sth,stx,sty,ewidth,eheight : INTEGER;
  788.                               
  789. BEGIN
  790.   ObjectOffset(tree1ptr,filedlg,xoff,yoff);
  791.   tree2ptr^[cpydlg + 1].x := xoff;
  792.   tree2ptr^[cpydlg + 1].y := yoff;
  793.   tree2ptr^[scrtrack + 1].width := 82;
  794.   tree2ptr^[scrslide + 1].width := 80;
  795.   tree2ptr^[scrslide + 1].x := (tree2ptr^[scrtrack + 1].x) + 1;
  796.   tree2ptr^[dsttrack + 1].width := 82;
  797.   tree2ptr^[dstslide + 1].width := 80;
  798.   tree2ptr^[dstslide + 1].x := (tree2ptr^[dsttrack + 1].x) + 1;
  799.   ewidth := tree1ptr^[filedlg + 1].width;
  800.   eheight := tree1ptr^[filedlg + 1].height;
  801.   stx := (xoff + ewidth) DIV 2;
  802.   sty := (yoff + eheight) DIV 2;
  803.   stw := 5;
  804.   sth := 2;
  805.   GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  806.   GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  807.   ObjectDraw(tree2ptr,cpydlg,3,x,y,w,h);
  808.   REPEAT  
  809.     showit := FormDo(tree2ptr,0);
  810.     IF GetObjectState(tree2,cpyok,Selected) THEN
  811.        DoCopy;
  812.        ObjectChange(tree2ptr,cpyok,0,x,y,w,h,Normal,1);
  813.        ObjectDraw(tree2ptr,cpyok,1,x,y,w,h);
  814.     END;
  815.   UNTIL GetObjectState(tree2,cpyexit,Selected);
  816.   GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  817.   GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  818.   ObjectChange(tree2ptr,cpyexit,0,x,y,w,h,Normal,1);
  819.   ObjectChange(tree1ptr,cpydisk,0,x,y,w,h,Normal,1);
  820.   ObjectDraw(tree1ptr,fileopts,4,x,y,w,h);
  821. END CopyDialog;
  822.  
  823. PROCEDURE Changespt;
  824.  
  825. VAR
  826.  sptstr : String;
  827.  sptobspec : etree;
  828.           
  829. BEGIN
  830.   IF nine = 0 THEN
  831.      sptstr := '9/80';
  832.      nine := 1;
  833.      sectorspertrack := 9;
  834.      tracksperdisk := 79;
  835.      tree1ptr^[ftrack + 1].width := 82;
  836.      tree1ptr^[fslider + 1].width := 80;
  837.   ELSE
  838.      sptstr := '10/82';
  839.      nine := 0;
  840.      sectorspertrack := 10;
  841.      tracksperdisk := 81;
  842.      tree1ptr^[ftrack + 1].width := 84;
  843.      tree1ptr^[fslider + 1].width := 82;
  844.   END;
  845.   tree1ptr^[fspt +1].spec^.ptext := ADR(sptstr);
  846.   ObjectDraw(tree1ptr,fspt,0,x,y,w,h);
  847.   ObjectChange(tree1ptr,fspt,0,x,y,w,h,Normal,1);
  848.   ObjectDraw(tree1ptr,slidebox,3,x,y,w,h);
  849. END Changespt;
  850.  
  851. PROCEDURE switch(VAR a,b: String ; VAR s1 : BOOLEAN);
  852.   
  853. VAR
  854.  t : String;
  855.  
  856.   BEGIN
  857.     t := a;
  858.     a := b;
  859.     b := t;
  860.     s1 := NOT s1;
  861.   END switch;
  862.  
  863. PROCEDURE save1(VAR q : INTEGER ;VAR s8 : twod ;a ,k1 : INTEGER);
  864.  
  865.   BEGIN
  866.     q := q+1;
  867.     s8[q,1] := a+1;
  868.     s8[q,2] := k1
  869.   END save1;
  870.  
  871. PROCEDURE restore(s8:twod ; VAR i2,j2,q : INTEGER);
  872.  
  873.   BEGIN
  874.     i2 := s8[q,1];
  875.     j2 := s8[q,2];
  876.     q := q - 1
  877.   END restore;
  878.  
  879. PROCEDURE init(VAR a,b,a1,b1 : INTEGER ; VAR es : BOOLEAN);
  880.  
  881.  BEGIN
  882.     a := a1;
  883.     b := b1;
  884.     es := FALSE;
  885.  END init;
  886.  
  887. PROCEDURE sort;
  888.  
  889. BEGIN  
  890.   
  891.   REPEAT
  892.     IF (Compare(path[i],path[j]) = Greater) THEN switch(path[i],path[j],s);END;
  893.     IF s THEN i := i + 1
  894.            ELSE j := j - 1;END;
  895.   UNTIL  i = j;
  896.     IF NOT(i+1 >= j1) THEN save1(p,s9,i,j1);END;
  897.     j1 := i - 1;
  898.     IF i1 < j1 THEN
  899.         init(i,j,i1,j1,s);
  900.         sort;
  901.     END;
  902.     IF p <> 0 THEN
  903.        restore(s9,i1,j1,p);
  904.        init(i,j,i1,j1,s);
  905.        j := ii;
  906.        sort;
  907.     END;
  908.   END sort;
  909.    
  910.              
  911. PROCEDURE MakeArray(VAR ppath : ARRAY OF CHAR);
  912.  
  913. VAR
  914.   addr : ADDRESS;
  915.   pathdrive,presult,match,directchr : String;
  916.   obspec : etree;
  917.   i2,l : INTEGER;
  918.   atrib,where,start : CARDINAL;
  919.    
  920. BEGIN
  921.   ii := 0;
  922.   fnslidery := 0;
  923.   tswidth := 0.0;
  924.   ttswidth := 0.0;
  925.   pathdrive := CHR(ORD(defaultdrive) + ORD('A'));
  926.   Concat(pathdrive,':',presult);
  927.   Concat(presult,ppath,pathstr);
  928.   addr := ADR(dtarecord);
  929.   GEMDOS.SetDTA(addr);
  930.   GrafMouse(HourGlass,NIL);
  931.   GEMDOS.SFirst(pathstr,16,result);
  932.   IF result >= 0 THEN
  933.      REPEAT
  934.        WITH dtarecord DO;
  935.          IF (Compare(name,'.') # Equal) AND (Compare(name,'..')
  936.                                                        # Equal) THEN
  937.             INC(ii);
  938.                 path[ii] := name;
  939.                 atrib := CARDINAL(attrib);
  940.                 directchr := CHR(5);
  941.                 Concat(directchr," ",directchr);
  942.                 IF atrib = 16 THEN
  943.                    Concat(directchr,path[ii],rpath[ii]);
  944.                  ELSE
  945.                    Concat('  ',path[ii],rpath[ii]);
  946.                  END; (* IF *)
  947.                  path[ii] := rpath[ii];
  948.                  IF Length(rpath[ii]) < 14 THEN
  949.                  FOR l := Length(rpath[ii]) + 1 TO 14 DO
  950.                      Concat(rpath[ii],' ',rpath[ii]);
  951.                   END; (* FOR *)
  952.                 END; (* IF *)   
  953.                 path[ii] := rpath[ii];
  954.          END; (* IF *)      
  955.        END; (* WITH *)  
  956.        IF ii < 300 THEN 
  957.          GEMDOS.SNext(result);
  958.        ELSE 
  959.          showit := FormAlert(1,'[1][The maximum number of files|has been exceeded!][ OK ]');
  960.          result := -1;END;
  961.      UNTIL result < 0;
  962.   END;  (* IF *)
  963.       match := ' ';
  964.       start := 0;
  965.       where := 0;
  966.       FOR i2 := 0 TO Length(pathstr) DO
  967.           IF Pos(pathstr,match,start,where) THEN
  968.           Delete(pathstr,where,1); END;
  969.           INC(start); 
  970.       END; (* FOR *)
  971.       IF ii > 1 THEN
  972.          i1 := 1;
  973.          i := 0;
  974.          p := 0;
  975.          j1 := ii;
  976.          init(i,j,i1,j1,s);
  977.           j := ii;
  978.          sort;
  979.       END; (* IF ii > *)   
  980.       tree1ptr^[fpath + 1].spec^.ptext := ADR(pathstr);
  981.       IF initialized THEN
  982.       ObjectDraw(tree1ptr,fpath,1,x,y,w,h);END;
  983.       GrafMouse(Arrow,NIL);
  984. END MakeArray;
  985.     
  986. PROCEDURE Directory;
  987.  
  988. VAR
  989.   i : INTEGER;
  990.   obspec : etree;
  991.   
  992. BEGIN
  993.      FOR i := 1 TO 12 DO
  994.         tree1ptr^[fname2 + i].spec^.ptext := ADR(path[i]);END;
  995. END Directory;         
  996.  
  997. PROCEDURE ClearArray;
  998.  
  999. VAR
  1000.   clearstr : String;
  1001.   obspec : etree;
  1002.   i : INTEGER;
  1003.   
  1004. BEGIN
  1005.   clearstr := '           ';
  1006.   FOR i := 0 TO ii DO
  1007.       path[i] := clearstr;
  1008.       tree1ptr^[fname2 + 1].spec^.ptext := ADR(path[i]);
  1009.   END; (* FOR *)
  1010.   
  1011. END ClearArray;
  1012.  
  1013. PROCEDURE ScrollDown;
  1014.  
  1015. VAR
  1016.   obspec : etree;
  1017.   i,j : INTEGER;
  1018.  
  1019. BEGIN
  1020.   ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  1021.   ObjectDraw(tree1ptr,fnametemp,1,x,y,w,h);
  1022.   j := 0;
  1023.   IF fcount < ii THEN
  1024.      DEC(index,11);
  1025.      FOR i := 1 TO 12 DO
  1026.        INC(index);
  1027. (*       obspec^.ptext := ADR(path[index]);*)
  1028.        tree1ptr^[fname2 + i].spec^.ptext := ADR(path[index]);
  1029.        ObjectDraw(tree1ptr,fname2 + j,1,x,y,w,h);
  1030.        INC(j);
  1031.      END; (* FOR *)
  1032.      INC(fcount);
  1033.      tswidth := tswidth + swidth;
  1034.      tree1ptr^[fnslider + 1].y := INTEGER(TRUNC(tswidth));
  1035.      ObjectDraw(tree1ptr,fntrack,1,x,y,w,h);
  1036.   END; (* IF *)
  1037. END ScrollDown;
  1038.  
  1039. PROCEDURE ScrollUp;
  1040.  
  1041. VAR 
  1042.   i,j : INTEGER;
  1043.   obspec : etree;
  1044.   
  1045. BEGIN
  1046.   ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  1047.   IF fcount > 12 THEN
  1048.      i := 12;
  1049.      j := 0;
  1050.      INC(index,11);
  1051.      WHILE i # 0 DO
  1052.          tree1ptr^[fname2 + i].spec^.ptext := ADR(path[index - 12]);
  1053.          ObjectDraw(tree1ptr,fname13 - j,1,x,y,w,h);
  1054.          DEC(i);
  1055.          INC(j);
  1056.          DEC(index);
  1057.      END; (* WHILE *)
  1058.      DEC(fcount);
  1059.      tswidth := tswidth - swidth;
  1060.      IF tswidth < 0.0 THEN tswidth := 0.0; END;
  1061.      tree1ptr^[fnslider + 1].y := INTEGER(TRUNC(tswidth));
  1062.      ObjectDraw(tree1ptr,fntrack,1,x,y,w,h);      
  1063.   END; (* IF *)
  1064. END ScrollUp;
  1065.  
  1066. PROCEDURE Scroll12;
  1067.  
  1068. VAR
  1069.   obspec : etree;
  1070.   temp,i,mx,my,mstate,kstate,xoff,yoff : INTEGER;
  1071.   
  1072. BEGIN
  1073.   ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  1074.   GrafMouseKeyboardState(mx,my,mstate,kstate);
  1075.   ObjectOffset(tree1ptr,fnslider,xoff,yoff);
  1076.   IF my > yoff THEN
  1077.     IF fcount < ii THEN
  1078.        temp := ii - fcount;
  1079.        IF temp < 12 THEN
  1080.           temp := 12 - temp;
  1081.           fcount := fcount - temp;
  1082.           index := index - temp;
  1083.        END;   
  1084.        FOR i := 1 TO 12 DO
  1085.            INC(fcount);
  1086.            INC(index);
  1087.            tree1ptr^[fname2 + i].spec^.ptext := ADR(path[index]);
  1088.            tswidth := tswidth + swidth;
  1089.        END;  (* FOR *)
  1090.        IF tswidth + FLOAT(CARDINAL(sh)) > FLOAT(CARDINAL(th)) THEN
  1091.           tswidth := FLOAT(CARDINAL(th)) - ttswidth;
  1092.        END;
  1093.        tree1ptr^[fnslider + 1].y := INTEGER(TRUNC(tswidth));
  1094.        ObjectDraw(tree1ptr,fntrack,1,x,y,w,h);
  1095.        ObjectDraw(tree1ptr,fwind,2,x,y,w,h);
  1096.     END;
  1097.   ELSE
  1098.      IF fcount > 12 THEN
  1099.        i := 12;
  1100.        IF index < 24 THEN
  1101.           temp := 24 - index;
  1102.           index := index + temp;
  1103.           fcount := index;
  1104.        END;   
  1105.        WHILE  i <> 0 DO
  1106.            tree1ptr^[fname2 + i].spec^.ptext := ADR(path[CARDINAL(index) - 12]);
  1107.            tswidth := tswidth - swidth;
  1108.            DEC(index);
  1109.            DEC(fcount);
  1110.            DEC(i);
  1111.        END;  (* WHILE *)
  1112.        IF tswidth < 0.0  THEN  tswidth := 0.0 ; END;
  1113.        tree1ptr^[fnslider + 1].y := INTEGER(TRUNC(tswidth));
  1114.        ObjectDraw(tree1ptr,fntrack,1,x,y,w,h);
  1115.        ObjectDraw(tree1ptr,fwind,2,x,y,w,h);
  1116.      END;
  1117.   END;   
  1118. END Scroll12;
  1119.  
  1120. PROCEDURE FileInfo;
  1121.  
  1122.  VAR
  1123.   fobspec,toobspec,obspec : etree;
  1124.   fname : POINTER TO String;
  1125.   start,mode,where,count,RESULT : CARDINAL;
  1126.   fnameaddr,addr : ADDRESS;
  1127.   which,get : GEMDOS.SetOrGet;
  1128.   drivepath,fnamestr,resultdrive,resultpath,thestring,temp,match,
  1129.   tempcurrentname : String;
  1130.   f,done,p : BOOLEAN;
  1131.   result,c,i : INTEGER;
  1132.   
  1133. BEGIN
  1134.   fname := tree1ptr^[ftoname + 1].spec^.ptext;
  1135.   currentname := fname^;
  1136.   tempcurrentname := currentname;
  1137.   FOR c := 1 TO ii DO
  1138.     IF NOT Pos(path[c],'*',0,where) THEN
  1139.       temp := path[c];
  1140.       Delete(temp,0,2);
  1141.       match := ' ';
  1142.       start := 0;
  1143.       where := 0;
  1144.       FOR i := 1 TO Length(temp) DO
  1145.           IF Pos(temp,match,start,where) THEN
  1146.           Delete(temp,where,Length(temp) - where); END;
  1147.           INC(start); 
  1148.       END;
  1149.     END;
  1150.     IF Compare(temp,tempcurrentname) = Equal THEN
  1151.        foundit := c; END;
  1152.   END;  
  1153.      
  1154.   IF Length(tempcurrentname) > 0 THEN
  1155.       tree1ptr^[filename +1].spec^.ptext := tree1ptr^[ftoname +1].spec^.ptext;
  1156.       fname := tree1ptr^[ftoname + 1].spec^.ptext;
  1157.       currentname := fname^;
  1158.       tempcurrentname := currentname;
  1159.      drivepath := CHR(ORD(defaultdrive) + ORD('A'));
  1160.      Concat(drivepath,':\',resultdrive);
  1161.      Concat(resultdrive,tempcurrentname,resultpath);
  1162.      IF Length(ffpath) > 4 THEN
  1163.         Copy(ffpath,0,Length(ffpath),temp);
  1164.         f := Pos(temp,'\*.*',0,where);
  1165.         Delete(temp,where,4);
  1166.         f := Pos(resultpath,':\',0,where);
  1167.         Insert(temp,resultpath,where + 1);
  1168.      END; (* IF *)   
  1169.      which := get;
  1170.      mode := 0;
  1171.      GrafMouse(HourGlass,NIL);
  1172.      GEMDOS.Attrib(resultpath,GEMDOS.get,mode);
  1173.      addr := ADR(dtarecord);
  1174.      GEMDOS.SetDTA(addr);
  1175.      GEMDOS.SFirst(resultpath,0,result);
  1176.      IF result >= 0 THEN
  1177.         WITH dtarecord DO
  1178.           ConvertToString(LONGCARD(size),10,FALSE,thestring,done);
  1179.           tree1ptr^[fbytes + 1].spec^.ptext := ADR(thestring);
  1180.           ObjectDraw(tree1ptr,fbytes,1,x,y,w,h);
  1181.           ConvertDateTime(date,time);
  1182.           tree1ptr^[fdate + 1].spec^.ptext := ADR(datestr);
  1183.           ObjectDraw(tree1ptr,fdate,1,x,y,w,h);
  1184.           tree1ptr^[ftime + 1].spec^.ptext := ADR(tresultstr);
  1185.           ObjectDraw(tree1ptr,ftime,1,x,y,w,h);               
  1186.         END;(* WITH *)
  1187.      END; (* IF *)
  1188.      IF Pos(tempcurrentname,'.',0,where) THEN
  1189.           IF where < 8 THEN
  1190.              RESULT := 9 - where - 1;
  1191.              start := where;
  1192.              count := 0;
  1193.              REPEAT
  1194.                Insert(' ',tempcurrentname,start);
  1195.                INC(count);
  1196.              UNTIL count = RESULT;
  1197.              p := Pos(tempcurrentname,'.',0,where);
  1198.           END; (* IF where *)
  1199.           Delete(tempcurrentname,where,1);
  1200.           (*fobspec^.ptext := ADR(tempcurrentname);*)
  1201.           tree1ptr^[filename + 1].spec^.ptext := ADR(tempcurrentname);
  1202.        END; (* IF Pos *)         
  1203.      ObjectDraw(tree1ptr,filename,1,x,y,w,h);
  1204.      IF mode = 0 THEN
  1205.         ObjectChange(tree1ptr,frw,0,x,y,w,h,selected,1);
  1206.         ObjectChange(tree1ptr,fro,0,x,y,w,h,Normal,1);
  1207.         ObjectDraw(tree1ptr,fro,1,x,y,w,h);
  1208.         ObjectDraw(tree1ptr,frw,1,x,y,w,h);
  1209.      ELSE
  1210.         ObjectChange(tree1ptr,fro,0,x,y,w,h,selected,1);   
  1211.         ObjectChange(tree1ptr,frw,0,x,y,w,h,Normal,1);
  1212.         ObjectDraw(tree1ptr,frw,1,x,y,w,h);
  1213.         ObjectDraw(tree1ptr,fro,1,x,y,w,h);
  1214.      END;
  1215.      ObjectChange(tree1ptr,finfo,0,x,y,w,h,Normal,1);
  1216.      ObjectDraw(tree1ptr,finfo,1,x,y,w,h);
  1217.      ObjectChange(tree1ptr,fset,0,x,y,w,h,Normal,1);
  1218.      GrafMouse(Arrow,NIL);
  1219.   ELSE
  1220.      ObjectChange(tree1ptr,finfo,0,x,y,w,h,Normal,1);
  1221.   END;      
  1222. END FileInfo;
  1223.         
  1224. PROCEDURE SetTheDrive;
  1225.  
  1226. VAR
  1227.   drvmap : LONGCARD;
  1228.   obspec : etree;
  1229.  
  1230. BEGIN
  1231.   IF GetObjectState(tree1,drivea,Selected) THEN drive := 0; END;
  1232.   IF GetObjectState(tree1,driveb,Selected) THEN drive := 1; END;
  1233.   IF GetObjectState(tree1,drivec,Selected) THEN drive := 2; END;
  1234.   IF GetObjectState(tree1,drived,Selected) THEN drive := 3; END;
  1235.   IF GetObjectState(tree1,drivee,Selected) THEN drive := 4; END;
  1236.   IF GetObjectState(tree1,drivef,Selected) THEN drive := 5; END;
  1237.   IF GetObjectState(tree1,driveg,Selected) THEN drive := 6; END;
  1238.   IF GetObjectState(tree1,driveh,Selected) THEN drive := 7; END;
  1239.   IF GetObjectState(tree1,drivei,Selected) THEN drive := 8; END;
  1240.   IF GetObjectState(tree1,drivej,Selected) THEN drive := 9; END;
  1241.   IF GetObjectState(tree1,drivek,Selected) THEN drive := 10; END;
  1242.   IF GetObjectState(tree1,drivel,Selected) THEN drive := 11; END;
  1243.   IF GetObjectState(tree1,drivem,Selected) THEN drive := 12; END;
  1244.   IF GetObjectState(tree1,driven,Selected) THEN drive := 13; END;
  1245.   IF GetObjectState(tree1,driveo,Selected) THEN drive := 14; END;
  1246.   IF GetObjectState(tree1,drivep,Selected) THEN drive := 15; END;
  1247.   GrafMouse(HourGlass,NIL);
  1248.   GEMDOS.SetDrv(drive,drvmap);
  1249.   GEMDOS.GetDrv(defaultdrive);
  1250.   (*ppath := '';
  1251.   p1 := '';
  1252.   p2 := '';
  1253.   p3 := '';
  1254.   p4 := '';
  1255.   ffpath := '';
  1256.   Temp1 := '';
  1257.   Temp2 := '';
  1258.   Temp3 := '';
  1259.   r1 := '';
  1260.   r2 := '';
  1261.   r3 := '';
  1262.   r4 := '';*)
  1263.   count := 0;
  1264.   fcount := 12;
  1265.   ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1); 
  1266.   ClearArray; 
  1267.   MakeArray(globlepath);
  1268.   Directory;
  1269.   index := 12;
  1270.   CalcSliderSize;
  1271.   ObjectDraw(tree1ptr,fwind,2,x,y,w,h);
  1272.   GrafMouse(Arrow,NIL);
  1273.   ClearIt;
  1274. END SetTheDrive;
  1275.  
  1276. PROCEDURE FirstPath;
  1277.  
  1278.   BEGIN 
  1279.     Concat('\',farray,r1);
  1280.     Concat(r1,'\*.*',p1);
  1281.     ffpath := p1;
  1282.   END FirstPath;
  1283.  
  1284. PROCEDURE SecondPath;
  1285.  
  1286.   BEGIN
  1287.     Concat('\',farray,r2);
  1288.     Concat(r1,r2,Temp1);
  1289.     Concat(Temp1,'\*.*',p2);
  1290.     ffpath := p2;
  1291.   END SecondPath;
  1292.  
  1293. PROCEDURE ThirdPath;
  1294.  
  1295. BEGIN
  1296.    Concat('\',farray,r3);
  1297.    Concat(Temp1,r3,Temp2);
  1298.    Concat(Temp2,'\*.*',p3);
  1299.    ffpath := p3;
  1300. END ThirdPath;
  1301.  
  1302. PROCEDURE FourthPath;
  1303.  
  1304. BEGIN
  1305.   Concat('\',farray,r4);
  1306.   Concat(Temp2,r4,Temp3);
  1307.   Concat(Temp3,'\*.*',p4);
  1308.   ffpath := p4;
  1309. END FourthPath;
  1310.            
  1311.  
  1312. PROCEDURE MoveName(fname : INTEGER);
  1313.  
  1314. VAR
  1315.  nameobspec,toobspec : etree;
  1316.  fnameaddr : POINTER TO String;
  1317.  nothin : String;
  1318.  l : INTEGER;
  1319.  where,start : CARDINAL;
  1320.                              
  1321. BEGIN
  1322.   fnameaddr := tree1ptr^[fname + 1].spec^.ptext;
  1323.   farray := fnameaddr^;
  1324.   match := CHR(5);
  1325.   IF Pos(farray,match,0,where) THEN
  1326.      ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  1327.      ObjectChange(tree1ptr,fname,0,x,y,w,h,selected,1);
  1328.      IF count < 4 THEN              
  1329.             INC(count);END;
  1330.      Delete(farray,0,2);
  1331.      IF count < 5 THEN
  1332.         CASE count OF
  1333.            1 : FirstPath;|   
  1334.            2 : SecondPath;|          
  1335.            3 : ThirdPath;| 
  1336.            4 : FourthPath; 
  1337.          END; (* CASE *)
  1338.          ClearArray;
  1339.          MakeArray(ffpath);
  1340.          Directory;
  1341.          CalcSliderSize;
  1342.          index := 12;
  1343.          fcount := 12;
  1344.          ObjectChange(tree1ptr,fname,0,x,y,w,h,Normal,1);
  1345.          ObjectDraw(tree1ptr,fname,1,x,y,w,h);
  1346.          ObjectDraw(tree1ptr,fwind,2,x,y,w,h);
  1347.          globlepath := ffpath;
  1348.          ClearIt;
  1349.      END;
  1350.   ELSE 
  1351.      IF NOT Pos(farray,match,0,where) THEN
  1352.      fnameaddr := tree1ptr^[fname + 1].spec^.ptext;
  1353.      filearray := fnameaddr^;
  1354.        Delete(filearray,0,2);
  1355.        IF Pos(filearray,' ',0,where) THEN
  1356.           FOR l := where TO Length(filearray) DO
  1357.               Delete(filearray,where,1);
  1358.           END; (* FOR  *)
  1359.        END; (* IF *)
  1360.        nothin := '';
  1361.        IF Compare(filearray,nothin) <> Equal THEN
  1362.        fileselection := fname;
  1363.        tree1ptr^[ftoname + 1].spec^.ptext := ADR(filearray);
  1364.        ObjectDraw(tree1ptr,ftoname,1,x,y,w,h);
  1365.        ObjectChange(tree1ptr,fname,0,x,y,w,h,selected,1);
  1366.          IF fname > fnametemp THEN
  1367.           ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);END;
  1368.          IF fname < fnametemp THEN
  1369.           ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);END;
  1370.          fnametemp := fname;       
  1371.        END;  
  1372.     END;   
  1373.   END; (* IF ELSE *)       
  1374. END MoveName;
  1375.  
  1376. PROCEDURE RenameOrSetAttrib;
  1377.  
  1378. VAR
  1379.   start,nb,l,mode,where,regresult,numberofspaces : CARDINAL;
  1380.   obspec,nobspec : etree;
  1381.   fnameaddr : POINTER TO String;
  1382.   which,get,set : GEMDOS.SetOrGet;
  1383.   pathdrive,newstr,oldstr,npathstr,temp,
  1384.   tempstr,rnewstr,result,thestring,newname : String;
  1385.   i,errorcheck : INTEGER;
  1386.   p,f,done,noerror : BOOLEAN;
  1387.   
  1388. BEGIN
  1389.   start := 0;
  1390.   noerror := TRUE;
  1391.   fnameaddr := tree1ptr^[filename + 1].spec^.ptext;
  1392.   newname := fnameaddr^;
  1393.   IF Length(newname) > 8 THEN
  1394.      IF Pos(newname,' ',0,where) THEN
  1395.         IF (where > 8) OR (where = 0) THEN
  1396.            Insert('.',newname,where);END;
  1397.         IF where # 0 THEN
  1398.            Insert('.',newname,where);
  1399.            p := Pos(newname,' ',0,where);
  1400.            nb := where;
  1401.            Delete(newname,where,9 - where);
  1402. END; (* IF where *)
  1403.      ELSE
  1404.        Insert('.',newname,8);
  1405.      END; (* IF Pos(newname) *)        
  1406.   END; (* IF Length(newname) *) 
  1407.   pathdrive := CHR(ORD(defaultdrive) + ORD('A'));
  1408.   Concat(pathdrive,':\',npathstr);
  1409.   Concat(npathstr,currentname,oldstr);
  1410.   Concat(npathstr,newname,newstr);
  1411.   IF Length(ffpath) > 0 THEN
  1412.      Copy(ffpath,0,Length(ffpath),temp);
  1413.      f := Pos(temp,'\*.*',0,where);
  1414.      Delete(temp,where,4);
  1415.      f := Pos(oldstr,':\',0,where);
  1416.      Insert(temp,oldstr,where + 1);
  1417.      Insert(temp,newstr,where + 1);
  1418.   END; (* IF *)
  1419.   IF Compare(currentname,newname) # Equal THEN
  1420.      IF Length(newname) > 0 THEN  
  1421.         GEMDOS.Rename(oldstr,newstr);
  1422.         Concat('  ',newname,rnewstr);
  1423.         tree1ptr^[fileselection + 1].spec^.ptext := ADR(rnewstr);
  1424.         IF Length(rnewstr) < 14 THEN
  1425.            numberofspaces := 14 - Length(rnewstr) + 1;
  1426.            FOR i := 1 TO numberofspaces DO
  1427.            Concat(rnewstr,' ',rnewstr);result := rnewstr; END;
  1428.         ELSE 
  1429.            result := rnewstr;
  1430.         END;      
  1431.         path[foundit] := result;
  1432.         ObjectDraw(tree1ptr,fileselection,1,x,y,w,h);
  1433.      ELSE
  1434.         showit := FormAlert(1,'[1][You did not specify|a name!][ OK ]');        noerror := FALSE;    
  1435.      END;
  1436.   END;(* IF Compare *) 
  1437.   IF noerror THEN     
  1438.      IF GetObjectState(tree1,frw,Selected) THEN
  1439.         mode := 0;
  1440.      ELSE 
  1441.        mode := 1;
  1442.      END;
  1443.      which := GEMDOS.set;
  1444.      GEMDOS.Attrib(oldstr,GEMDOS.set,mode);
  1445.      ClearIt;
  1446.      ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  1447.   END;   
  1448.      ObjectChange(tree1ptr,fset,0,x,y,w,h,disabled,1);
  1449.      ObjectDraw(tree1ptr,fset,1,x,y,w,h);
  1450. END RenameOrSetAttrib;
  1451.  
  1452. PROCEDURE FilePath;
  1453.  
  1454. VAR
  1455.   obspec : etree;
  1456.   start,where : CARDINAL;
  1457.   found : BOOLEAN;
  1458.   nothin,clear : String;
  1459.  
  1460. BEGIN
  1461.    ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  1462.    IF count > 0  THEN
  1463.       CASE count OF
  1464.        1 : ppath := '\*.*';
  1465.            ffpath := '\*.*';
  1466.            p1 := '';|
  1467.        
  1468.        2 : ppath := p1;
  1469.            ffpath := p1;
  1470.            p2 := '';|
  1471.            
  1472.        3 : ppath := p2;
  1473.            ffpath := p2;
  1474.            p3 := '';|
  1475.        
  1476.        4 : ppath := p3;
  1477.            ffpath := p3;
  1478.            p4 := '';
  1479.      END;
  1480.      IF count >= 1 THEN
  1481.         DEC(count);END;             
  1482.      ClearArray;   
  1483.      MakeArray(ppath);
  1484.      Directory;
  1485.      index := 12;
  1486.      fcount := 12;
  1487.      CalcSliderSize;
  1488.      ObjectDraw(tree1ptr,fwind,2,x,y,w,h);
  1489.      globlepath := ppath;
  1490.      nothin := '';
  1491.      IF NOT GetObjectState(tree1,cpyfile,Selected) THEN
  1492.      filearray := nothin;END;
  1493.      clear := '';
  1494.    END; 
  1495.    ClearIt;
  1496. END FilePath;  
  1497.  
  1498. PROCEDURE PrintThePath;
  1499.  
  1500. VAR
  1501.   result : INTEGER;
  1502.   blanks,blank,rblank,astek, 
  1503.   rpath,path,rrpath,single,double,tsizestr,temppathstr : String;
  1504.   l,i,t,atrib,where,start : CARDINAL;
  1505.  
  1506. BEGIN
  1507.   WriteString('PATH: ');
  1508.   temppathstr := pathstr;
  1509.       match := ' ';
  1510.       start := 0;
  1511.       where := 0;
  1512.       FOR i := 0 TO Length(temppathstr) DO
  1513.           IF Pos(temppathstr,match,start,where) THEN
  1514.           Delete(temppathstr,where,1); END;
  1515.           INC(start); 
  1516.       END; (* FOR *)
  1517.   WriteString(temppathstr);
  1518.   WriteLn;
  1519.   WriteLn;
  1520.   REPEAT
  1521.     WITH dtarecord DO
  1522.        single := '.';
  1523.        double := '..';
  1524.        IF (Compare(name,single) # Equal) AND 
  1525.           (Compare(name,double) # Equal) THEN
  1526.           path := name;
  1527.           l := Length(path);
  1528.           IF l < 13 THEN
  1529.              FOR t := l TO 12 DO
  1530.               Concat(rblank,' ',rblank);
  1531.              END; (* FOR *)
  1532.              Concat(path,rblank,rpath);
  1533.              rblank := '';   
  1534.           END; (* IF *)
  1535.           atrib := CARDINAL(attrib);
  1536.           IF atrib = 16 THEN
  1537.              Concat('*',rpath,rrpath);
  1538.           ELSE
  1539.              Concat(' ',rpath,rrpath);
  1540.           END; (* IF *)                                  
  1541.           INC(ct);
  1542.           WriteString(rrpath);
  1543.           WriteString(' ');
  1544.           WriteLongCard(size,6);
  1545.           WriteString('  ');
  1546.           tsize := tsize + size;
  1547.           IF ct = 3 THEN 
  1548.              WriteLn;
  1549.              ct := 0;
  1550.           END;(* IF *)
  1551.        END; (* IF *)  
  1552.     END; (* WITH *)
  1553.     GEMDOS.SNext(result);
  1554.   UNTIL result < 0;
  1555.   ct := 0;
  1556.   WriteLn;
  1557.   WriteLn;
  1558.   ConvertToString(LONGCARD(tsize),10,FALSE,tsizestr,done);
  1559.   WriteString(tsizestr);
  1560.   WriteString(' Bytes used in ');
  1561.   WriteString(temppathstr);
  1562.   WriteLn;
  1563.   WriteLn;
  1564.   GetFreeSpace;
  1565.   ConvertToString(LONGCARD(free),10,FALSE,freestr,done);
  1566.   WriteString(freestr);
  1567.   WriteString(' BYTES Remaining');
  1568.   WriteLn; 
  1569.   tsize := 0;
  1570.    
  1571. END PrintThePath;
  1572.  
  1573.  
  1574. PROCEDURE PrintAll;
  1575.  
  1576. VAR
  1577.   result : INTEGER;
  1578.   blanks,blank,rblank,astek,
  1579.   rpath,path,rrpath,single,double,tsizestr,temppathstr : String;
  1580.   l,i,t,atrib,where,start : CARDINAL;
  1581.   
  1582. BEGIN
  1583.   WriteString('PATH: ');
  1584.   temppathstr := pathstr;
  1585.       match := ' ';
  1586.       start := 0;
  1587.       where := 0;
  1588.       FOR i := 0 TO Length(temppathstr) DO
  1589.           IF Pos(temppathstr,match,start,where) THEN
  1590.           Delete(temppathstr,where,1); END;
  1591.           INC(start); 
  1592.       END; (* FOR *)
  1593.   WriteString(temppathstr);
  1594.   WriteLn;
  1595.   WriteLn;
  1596.   WriteString('  File Name       Time     Date       Size');
  1597.   WriteLn;
  1598.   WriteLn;
  1599.   REPEAT
  1600.     WITH dtarecord DO
  1601.        single := '.';
  1602.        double := '..';
  1603.        IF (Compare(name,single) # Equal) AND 
  1604.           (Compare(name,double) # Equal) THEN  
  1605.           path := name;
  1606.           l := Length(path);
  1607.           IF l < 13 THEN
  1608.              FOR t := l TO 12 DO
  1609.                 Concat(rblank,' ',rblank);
  1610.              END; (* FOR *)
  1611.              Concat(path,rblank,rpath);
  1612.              rblank := '';   
  1613.           END; (* IF *)
  1614.           atrib := CARDINAL(attrib);
  1615.           IF atrib = 16 THEN
  1616.              Concat('*',rpath,rrpath);
  1617.           ELSE
  1618.              Concat(' ',rpath,rrpath);
  1619.           END; (* IF *)                                  
  1620.           WriteString(rrpath);
  1621.           ConvertDateTime(date,time);
  1622.           Insert('-',datestr,2);
  1623.           Insert('-',datestr,5);
  1624.           Insert(':',tresultstr,2);
  1625.           WriteString('   ');
  1626.           WriteString(tresultstr);
  1627.           WriteString('   ');
  1628.           WriteString(datestr);
  1629.           WriteString('   ');                        
  1630.           WriteLongCard(size,6);
  1631.           WriteString('  ');
  1632.           WriteLn;
  1633.           tsize := tsize + size;
  1634.        END; (* IF *)   
  1635.     END; (* WITH *)
  1636.     GEMDOS.SNext(result);
  1637.   UNTIL result < 0;
  1638.     WriteLn;
  1639.     WriteLn;
  1640.     ConvertToString(LONGCARD(tsize),10,FALSE,tsizestr,done);
  1641.     WriteString(tsizestr);
  1642.     WriteString(' Bytes used in ');
  1643.     WriteString(temppathstr);
  1644.     WriteLn;
  1645.     WriteLn;
  1646.     GetFreeSpace;
  1647.     ConvertToString(LONGCARD(free),10,FALSE,freestr,done);
  1648.     WriteString(freestr);
  1649.     WriteString(' BYTES Remaining');
  1650.     WriteLn; 
  1651.     tsize := 0;
  1652. END PrintAll;
  1653.  
  1654. PROCEDURE HardCopy;
  1655.  
  1656. VAR
  1657.   addr : ADDRESS;
  1658.   rprint : BOOLEAN;
  1659.   
  1660. BEGIN
  1661.   addr := ADR(dtarecord);
  1662.   GEMDOS.SetDTA(addr);
  1663.   GEMDOS.SFirst(pathstr,16,result);
  1664.   rprint := BCosStat(PRT);
  1665.   GrafMouse(HourGlass,NIL);
  1666.   IF rprint = TRUE THEN
  1667.      OpenOutputFile("PRN:");
  1668.      WriteLn;
  1669.      IF GetObjectState(tree1,fnone,Selected) THEN
  1670.         PrintThePath;
  1671.         WriteLn;
  1672.         OpenOutputFile("CON:");
  1673.      ELSE
  1674.         PrintAll;
  1675.         WriteLn;
  1676.         OpenOutputFile("CON:");
  1677.      END; (* IF *)
  1678.    ELSE
  1679.      showit := FormAlert(1,"[1][Printer is not|responding!][ OK ]");
  1680.    END; (* IF *)
  1681.    GrafMouse(Arrow,NIL);
  1682.    ObjectChange(tree1ptr,fprint,0,x,y,w,h,Normal,1);
  1683. END HardCopy;
  1684.  
  1685. PROCEDURE MoveSlider;
  1686.  
  1687. VAR
  1688.    i,sw,sh,tw,th,fx,fy,trackx,tracky,sliderx,slidery,
  1689.    curyoff : INTEGER;
  1690.    obspec : etree;
  1691.    count : REAL;
  1692.       
  1693. BEGIN
  1694.    ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  1695.    sw := tree1ptr^[fnslider + 1].width + 1;
  1696.    sh := tree1ptr^[fnslider + 1].height;
  1697.    tw := tree1ptr^[fntrack + 1].width;
  1698.    th := tree1ptr^[fntrack + 1].height;     
  1699.    ObjectOffset(tree1ptr,fntrack,trackx,tracky);
  1700.    ObjectOffset(tree1ptr,fnslider,sliderx,slidery);
  1701.    GrafDragBox(sw,sh,sliderx,slidery,trackx,tracky,tw,th,fx,fy);
  1702.    tree1ptr^[fnslider + 1].y := fy - tracky;
  1703.    ObjectDraw(tree1ptr,fntrack,1,x,y,w,h);
  1704.    count := FLOAT(CARDINAL(fy - tracky)) / swidth;
  1705.    index := INTEGER(TRUNC(count));
  1706.    fcount := index;
  1707.    curyoff := tree1ptr^[fnslider + 1].y;
  1708.    tswidth := count * swidth;
  1709.       FOR i := 1 TO 12 DO
  1710.           INC(fcount);
  1711.           INC(index);
  1712.           tree1ptr^[fname2 + i].spec^.ptext := ADR(path[index]);
  1713.       END; (* FOR *)
  1714.       ObjectDraw(tree1ptr,fwind,1,x,y,w,h);
  1715.    oldyoff := curyoff;
  1716. END MoveSlider;
  1717.  
  1718. PROCEDURE copy(rsfile,rdfile : String);
  1719.  
  1720. VAR 
  1721.    infile, outfile,xoff,yoff,ewidth,eheight,stx,sty,stw,sth : INTEGER;
  1722.    endof : GEMDOS.SeekMode;
  1723.    position,count : LONGCARD;
  1724.    done,p,f : BOOLEAN;
  1725.    cftree,cf2tree : etree;
  1726.    tempstr,newstr,newnamestr,temp2str,errorstr,thestring : String;
  1727.    l,where,start,count2,RESULT,nb : CARDINAL;
  1728.    i : INTEGER;
  1729.    newnameaddr : POINTER TO String;
  1730.  
  1731. BEGIN
  1732.    start := 0;
  1733.    where := 0;
  1734.    GrafMouse(HourGlass,NIL);
  1735.    GEMDOS.Open(rdfile,0,outfile);
  1736.    IF outfile >= 0 THEN
  1737.       match := '\';
  1738.       FOR i := 0 TO Length(rdfile) DO
  1739.           IF Pos(rdfile,match,start,where) THEN
  1740.           INC(start); END;
  1741.       END;     
  1742.       tempstr := rdfile;
  1743.       Delete(tempstr,0,start);
  1744.       
  1745.       start := 0;
  1746.       where := 0;
  1747.  
  1748.       IF Pos(tempstr,'.',0,where) THEN
  1749.           IF where < 8 THEN
  1750.              RESULT := 9 - where - 1;
  1751.              start := where;
  1752.              count2 := 0;
  1753.              REPEAT
  1754.                Insert(' ',tempstr,start);
  1755.                INC(count2);
  1756.              UNTIL count2 = RESULT;
  1757.              p := Pos(tempstr,'.',0,where);
  1758.           END; (* IF where *)
  1759.           Delete(tempstr,where,1);
  1760.        END; (* IF Pos *)
  1761.        
  1762.      
  1763.       tree3ptr^[cfdest + 1].spec^.ptext := ADR(tempstr);
  1764.       ObjectOffset(tree1ptr,filedlg,xoff,yoff);
  1765.       tree3ptr^[errdlg + 1].x := xoff;
  1766.       tree3ptr^[errdlg + 1].y := yoff;
  1767.       ewidth := tree3ptr^[errdlg + 1].width;
  1768.       eheight := tree3ptr^[errdlg + 1].height;
  1769.       stx := (xoff + ewidth) DIV 2;
  1770.       sty := (yoff + eheight) DIV 2;
  1771.       stw := 5;
  1772.       sth := 2;
  1773.       GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  1774.       GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  1775.       ObjectDraw(tree3ptr,errdlg,1,xx,yy,ww,hh);
  1776.       ObjectChange(tree3ptr,cfcancel,0,x,y,w,h,Normal,1);
  1777.       GrafMouse(Arrow,NIL);
  1778.       showit := FormDo(tree3ptr,0);
  1779.       therewasanerror := TRUE;
  1780.       match := '\';
  1781.       start := 0;
  1782.       where := 0;
  1783.       FOR i := 0 TO Length(rdfile) DO
  1784.           IF Pos(rdfile,match,start,where) THEN
  1785.           INC(start); END;
  1786.       END;     
  1787.       temp2str := rdfile;
  1788.       Delete(temp2str,start,Length(rdfile) - start);
  1789.       newnameaddr := tree3ptr^[cfdest + 1].spec^.ptext;
  1790.       newnamestr := newnameaddr^;
  1791.  
  1792.       
  1793.       where := 0;
  1794.       start := 0;
  1795.       nb := 0;
  1796.         
  1797.       IF Length(newnamestr) > 8 THEN
  1798.          IF Pos(newnamestr,' ',0,where) THEN
  1799.             IF (where > 8) OR (where = 0) THEN
  1800.                Insert('.',newnamestr,where);END;
  1801.             IF where # 0 THEN
  1802.                Insert('.',newnamestr,where);
  1803.                p := Pos(newnamestr,' ',0,where);
  1804.                nb := where;
  1805.                Delete(newnamestr,where,9 - where);
  1806.             END; (* IF where *)
  1807.          ELSE
  1808.             Insert('.',newnamestr,8);
  1809.          END; (* IF Pos(newnamestr) *)        
  1810.       END; (* IF Length(newnamestr) *) 
  1811.  
  1812.       Concat(temp2str,newnamestr,newstr);
  1813.       rdfile := newstr;
  1814.       GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  1815.       GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  1816.       
  1817.       IF confirmcopy THEN
  1818.          ObjectDraw(tree5ptr,copydlg,2,x,y,w,h);
  1819.       ELSE   
  1820.         ObjectDraw(tree1ptr,fileopts,4,x,y,w,h);END;
  1821.    END;
  1822.    IF GetObjectState(tree3,cfok,Selected) THEN
  1823.       ObjectChange(tree3ptr,cfok,0,x,y,w,h,Normal,0);
  1824.    END; (* IF *)
  1825.    IF NOT GetObjectState(tree3,cfcancel,Selected) THEN
  1826.       GrafMouse(HourGlass,NIL);
  1827.       GEMDOS.Create(rdfile,0,outfile);
  1828.       IF outfile >= 0 THEN
  1829.          GEMDOS.Open(rsfile,0,infile);
  1830.          REPEAT
  1831.            done := GEMDOS.Close(outfile);
  1832.            GEMDOS.Open(rdfile,1,outfile);
  1833.            GEMDOS.Seek(0,outfile,GEMDOS.end,position);
  1834.            GEMDOS.Read(infile,Count,bufferaddr);
  1835.            IF NOT therewasanerror THEN
  1836.               sizebuffer := sizebuffer + Count;
  1837.               therewasanerror := FALSE;END;
  1838.            IF sizebuffer < free THEN
  1839.               GEMDOS.Write(outfile,Count,bufferaddr);
  1840.               cresult := 0;
  1841.            ELSE
  1842.               Count := 0;
  1843.               cresult := -1;
  1844.               showit := FormAlert(1,'[1][There is not enough room|in the destination!][ok]');
  1845.               f := GEMDOS.Delete(rdfile);END;
  1846.          UNTIL Count = 0;
  1847.          done := GEMDOS.Close(outfile);
  1848.          done := GEMDOS.Close(infile);
  1849.          GrafMouse(Arrow,NIL);  
  1850.       END; (* outfile *)   
  1851.    ELSE 
  1852.       done := GEMDOS.Close(outfile);
  1853.    END; (* IF ELSE*)     
  1854. END copy;
  1855.           
  1856. PROCEDURE CopytheFile(sfile,dfile : String);
  1857.   
  1858. VAR
  1859.   sourceobspec,destobspec,conobspec,toobspec : etree;
  1860.   sfilename,destfilename,fname : POINTER TO String;
  1861.   tempstr,rsfile,rdfile,errorstr,match,thestring,rstr,currentname : String;
  1862.   p,wildcard : BOOLEAN;
  1863.   l,i,start,where,start2,where2 : CARDINAL;
  1864.   dtaaddr : ADDRESS;
  1865.   result,numberoffiles : INTEGER;
  1866.   fnrecord : pathrecord;
  1867.   sizeaccum,memory : LONGCARD;
  1868.   
  1869. BEGIN
  1870.   sizebuffer := 0;
  1871.   numberoffiles := 0;
  1872.   wildcard := FALSE;
  1873.   sizeaccum := 0; 
  1874.   fname := tree1ptr^[ftoname + 1].spec^.ptext;
  1875.   currentname := fname^;
  1876.   IF Length(currentname) > 0 THEN           
  1877.   IF confirmcopy THEN
  1878.      GEMDOS.SetDTA(ADR(fnrecord));
  1879.      GEMDOS.SFirst(sfile,0,result);
  1880.      IF result >= 0  THEN
  1881.         REPEAT
  1882.           INC(numberoffiles);
  1883.           GEMDOS.SNext(result);
  1884.         UNTIL result < 0;END; 
  1885.         ConvertInteger(numberoffiles,1,thestring);
  1886.         tree5ptr^[numtocpy + 1].spec^.ptext := ADR(thestring);
  1887.         ConfirmCopys;
  1888.   END;
  1889.   IF (GetObjectState(tree5,condlgok,Selected) OR
  1890.      (GetObjectState(tree4,cpyno,Selected)))  THEN
  1891.      IF GetObjectState(tree1,cpydst,Selected) THEN
  1892.         GEMDOS.Alloc(LONGCARD(-1),freememory);
  1893.         IF LONGCARD(freememory) < 100000 THEN
  1894.            GEMDOS.Alloc((LONGCARD(freememory) - 20000),bufferaddr);
  1895.            memory := LONGCARD(freememory);
  1896.         ELSE   
  1897.            GEMDOS.Alloc(100000,bufferaddr);
  1898.            memory := 100000;END;
  1899.         dtaaddr := ADR(fnrecord);
  1900.         GEMDOS.SetDTA(dtaaddr);
  1901.         GetFreeSpace;
  1902.         GEMDOS.SFirst(sfile,0,result);
  1903.         start := 0;
  1904.         where := 0;     
  1905.         match := '*.';
  1906.         start2 := 0;
  1907.         where2 := 0;
  1908.         IF Pos(dfile,match,start,where) THEN
  1909.            wildcard := TRUE;
  1910.            match := "\";
  1911.            FOR i := 0 TO Length(dfile) DO
  1912.               IF Pos(dfile,match,start2,where2) THEN
  1913.                  start2 := where2 + 1;END;
  1914.            END; 
  1915.            IF start2  # start THEN
  1916.               start := start2;END; 
  1917.            Delete(dfile,start,Length(dfile) - start); END; 
  1918.         start := 0;
  1919.         where := 0; 
  1920.         start2 := 0;
  1921.         where2 := 0;    
  1922.         match := '*.';
  1923.         IF Pos(sfile,match,start,where) THEN
  1924.            wildcard := TRUE;
  1925.            match := "\";
  1926.            FOR i := 0 TO Length(sfile) DO
  1927.               IF Pos(sfile,match,start2,where2) THEN
  1928.                  start2 := where2 + 1;END;
  1929.            END; 
  1930.            IF start2 # start THEN
  1931.               start := start2;END; 
  1932.            Delete(sfile,start,Length(sfile) - start); END;
  1933.         IF result >= 0 THEN
  1934.            REPEAT
  1935.              IF wildcard THEN        
  1936.                 Concat(sfile,fnrecord.name,rsfile);
  1937.                 Concat(dfile,fnrecord.name,rdfile);
  1938.              ELSE
  1939.                 rsfile := sfile;
  1940.                 rdfile := dfile;END;
  1941.              Count := memory;
  1942.              copy(rsfile,rdfile);
  1943.              IF cresult >= 0 THEN
  1944.                 GEMDOS.SNext(result);END;
  1945.              therewasanerror := FALSE;      
  1946.              IF confirmcopy THEN
  1947.                  DEC(numberoffiles);
  1948.                  ConvertInteger(numberoffiles,1,thestring);
  1949.                  IF ((numberoffiles >= 10) AND (numberoffiles < 100)) THEN
  1950.                     Concat(' ',thestring,rstr);thestring := rstr;END;
  1951.                  IF numberoffiles < 10 THEN
  1952.                     Concat('  ',thestring,rstr);thestring := rstr;END;
  1953.                  (*conobspec^.ptext := ADR(thestring); *)
  1954.                  tree5ptr^[numtocpy + 1].spec^.ptext := ADR(thestring);  
  1955.                  ObjectDraw(tree5ptr,numtocpy,1,x,y,w,h);END;   
  1956.            UNTIL (cresult < 0) OR (result < 0);
  1957.         END;(* IF *)
  1958.         cresult := 0;
  1959.         done := GEMDOS.Free(bufferaddr);
  1960.         IF NOT GetObjectState(tree3,cfcancel,Selected) THEN
  1961.            ClearArray;
  1962.            MakeArray(globlepath);
  1963.            Directory;
  1964.            index := 12;
  1965.            fcount := 12;
  1966.            CalcSliderSize;
  1967.            ObjectDraw(tree1ptr,fwind,2,x,y,w,h);
  1968.            GetFreeSpace;
  1969.         ELSE
  1970.            ObjectChange(tree3ptr,cfcancel,0,x,y,w,h,Normal,0);END;   
  1971.         IF therewasanerror THEN
  1972.            therewasanerror := FALSE; END;
  1973.      ELSE
  1974.         errorstr := '[1][A destination path has|not been Selected!][ OK ]';
  1975.         showit := FormAlert(1,errorstr); 
  1976.      END; (* IF ELSE *)
  1977.   ELSE
  1978.      IF NOT confirmcopy THEN 
  1979.      CancelCopy;
  1980.      ObjectChange(tree5ptr,condlgcl,0,x,y,w,h,Normal,0);END;    
  1981.   END;(* IF ELSE *)
  1982.     
  1983.   IF confirmcopy THEN
  1984.                  ObjectChange(tree5ptr,condlgok,0,x,y,w,h,Normal,0);
  1985.                  ObjectDraw(tree1ptr,filedlg,4,x,y,w,h);
  1986.                  tree1ptr^[verify + 1].spec^.ptext := ADR(gverifystr);
  1987.                  ObjectDraw(tree1ptr,verify,1,x,y,w,h);END;
  1988.   ELSE
  1989.      showit := FormAlert(1,'[1][A file(s) not Specified!][ OK ]');
  1990.   END;                
  1991.   ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  1992.   ObjectDraw(tree1ptr,fnametemp,1,x,y,w,h); 
  1993.   tree1ptr^[verify + 1].spec^.ptext := ADR(gverifystr);
  1994.   ObjectDraw(tree1ptr,verify,1,x,y,w,h);              
  1995. END CopytheFile;
  1996.  
  1997. PROCEDURE CopyDiskorFile;
  1998.  
  1999. VAR
  2000.    totree,fromtree,foptstree : etree;
  2001.    tostring,fromstring,fileoptstr,
  2002.    tempstr,sourcename,sourcefile,destfile : String;
  2003.    result : ARRAY[0..79] OF CHAR;
  2004.    destobspec,sourceobspec : etree;
  2005.    destfilename,sfilename : POINTER TO String;
  2006.    p : BOOLEAN;
  2007.    l,i,start,where : CARDINAL;
  2008.    
  2009. BEGIN
  2010.   IF GetObjectState(tree1,cpydisk,Selected) THEN
  2011.      CopyDialog;
  2012.      ObjectChange(tree1ptr,cpydisk,0,x,y,w,h,Normal,0);
  2013.      tree1ptr^[verify + 1].spec^.ptext := ADR(gverifystr);
  2014.      ObjectDraw(tree1ptr,verify,1,x,y,w,h);
  2015.   END;
  2016.   IF GetObjectState(tree1,cpyfile,Selected) THEN
  2017.      start := 0;
  2018.      p := Pos(sourcepathstr,'*.',start,where);
  2019.      Delete(sourcepathstr,where,3);
  2020.      start := 0;       
  2021.      FOR i := 0 TO Length(sourcepathstr) DO
  2022.       IF Pos(sourcepathstr,' ',start,where) THEN
  2023.          Delete(sourcepathstr,where,1);
  2024.          INC(start);
  2025.       END; (* IF *)
  2026.      END; (* FOR *)
  2027.      sfilename := tree1ptr^[ftoname + 1].spec^.ptext;
  2028.      sourcename := sfilename^;
  2029.      Concat(sourcepathstr,sourcename,sourcefile);
  2030.      
  2031.      destfilename := tree1ptr^[ftoname + 1].spec^.ptext;
  2032.      destname := destfilename^;
  2033.      tempstr := pathstr;
  2034.      start := 0;
  2035.      p := Pos(tempstr,'*.',start,where);
  2036.      Delete(tempstr,where,3);
  2037.      where := 0;
  2038.      start := 0;
  2039.      FOR i := 0 TO Length(tempstr) DO
  2040.       IF Pos(tempstr,' ',start,where) THEN
  2041.          Delete(tempstr,where,1);
  2042.          INC(start);
  2043.       END; (* IF *)
  2044.      END; (* FOR *)
  2045.      Concat(tempstr,destname,destfile);
  2046.      
  2047.      CopytheFile(sourcefile,destfile);
  2048.      ObjectChange(tree1ptr,cpyfile,0,x,y,w,h,Normal,1);
  2049.      ObjectChange(tree1ptr,cpydisk,0,x,y,w,h,Normal,1);
  2050.      ObjectChange(tree1ptr,verify,0,x,y,w,h,Normal,1);
  2051.      ObjectChange(tree1ptr,cpydst,0,x,y,w,h,Normal,1);
  2052.      ObjectChange(tree1ptr,cpyscr,0,x,y,w,h,selected,1);
  2053.   END;
  2054.   ObjectChange(tree1ptr,cpycopy,0,x,y,w,h,Normal,1); 
  2055.   ClearIt;
  2056. END CopyDiskorFile;        
  2057.  
  2058. PROCEDURE CancelCopy;
  2059.  
  2060. BEGIN
  2061.   IF GetObjectState(tree1,cpydisk,Selected) THEN
  2062.      ObjectChange(tree1ptr,cpydisk,0,x,y,w,h,Normal,1); 
  2063.      ObjectDraw(tree1ptr,cpydisk,1,x,y,w,h);
  2064.   END;
  2065.   IF GetObjectState(tree1,cpyfile,Selected) THEN
  2066.      ObjectChange(tree1ptr,cpyfile,0,x,y,w,h,Normal,1);
  2067.      ObjectChange(tree1ptr,cpydisk,0,x,y,w,h,Normal,1);
  2068.      ObjectChange(tree1ptr,cpydst,0,x,y,w,h,Normal,1);
  2069.      ObjectChange(tree1ptr,cpyscr,0,x,y,w,h,selected,1);
  2070.   END;
  2071.   ObjectChange(tree1ptr,cpycancl,0,x,y,w,h,Normal,1);
  2072. END CancelCopy;
  2073.  
  2074. PROCEDURE ErasetheFile;
  2075.  
  2076. VAR
  2077.    dltobspec,toobspec : etree;
  2078.    fname : POINTER TO String;
  2079.    currentname,drivepath,resultdrive,resultpath,temp,rpath,tempstr
  2080.    ,match,thestring,rstr : String;
  2081.    result,i,numberoffiles : INTEGER;
  2082.    where,start,l,start2,where2 : CARDINAL;
  2083.    f : BOOLEAN;
  2084.    fnrecord : pathrecord;
  2085.    addr : ADDRESS;
  2086.  
  2087. BEGIN
  2088.   numberoffiles := 0;
  2089.   fname := tree1ptr^[ftoname + 1].spec^.ptext;
  2090.   currentname := fname^;
  2091.   IF Length(currentname) > 0 THEN 
  2092.      drivepath := CHR(ORD(defaultdrive) + ORD('A'));
  2093.      Concat(drivepath,':\',resultdrive);
  2094.      Concat(resultdrive,currentname,resultpath);
  2095.      IF Length(ffpath) > 4 THEN
  2096.         Copy(ffpath,0,Length(ffpath),temp);
  2097.         f := Pos(temp,'\*.*',0,where);
  2098.         Delete(temp,where,4);
  2099.         f := Pos(resultpath,':\',0,where);
  2100.         Insert(temp,resultpath,where + 1);
  2101.      END;
  2102.      IF confirmdlt THEN
  2103.         GEMDOS.SetDTA(ADR(fnrecord));
  2104.         GEMDOS.SFirst(resultpath,0,result);
  2105.         IF result >= 0 THEN
  2106.            REPEAT
  2107.              INC(numberoffiles);
  2108.              GEMDOS.SNext(result);
  2109.            UNTIL result < 0;END; 
  2110.            ConvertInteger(numberoffiles,1,thestring);
  2111.            tree6ptr^[numtocpy + 1].spec^.ptext := ADR(thestring);
  2112.            ConfirmDeletes;END;
  2113.         IF (GetObjectState(tree6,dltdlgok,Selected) OR 
  2114.            (GetObjectState(tree4,dltno,Selected))) THEN   
  2115.            addr := ADR(fnrecord);
  2116.            GEMDOS.SetDTA(addr);
  2117.            GrafMouse(HourGlass,NIL);
  2118.            GEMDOS.SFirst(resultpath,0,result);
  2119.            IF result >= 0 THEN
  2120.            
  2121.            match := '*.';
  2122.               start := 0;
  2123.               where := 0; 
  2124.               start2 := 0;
  2125.               where2 := 0;    
  2126.               IF Pos(resultpath,match,start,where) THEN
  2127.                  match := "\";
  2128.                  FOR i := 0 TO Length(resultpath) DO
  2129.                     IF Pos(resultpath,match,start2,where2) THEN
  2130.                        start2 := where2 + 1;END;
  2131.                  END; 
  2132.                  IF start2 # start THEN
  2133.                     start := start2;END;
  2134.               ELSE
  2135.                  match := '\';
  2136.                  FOR i := 0 TO Length(resultpath) DO
  2137.                      IF Pos(resultpath,match,start,where) THEN
  2138.                         start := where + 1;END;
  2139.                  END;
  2140.               END;                
  2141.               Delete(resultpath,start,Length(resultpath) - start);
  2142.  
  2143.            REPEAT
  2144.              Concat(resultpath,fnrecord.name,rpath);
  2145.              f := GEMDOS.Delete(rpath);
  2146.              IF confirmdlt THEN
  2147.                 DEC(numberoffiles);
  2148.                 ConvertInteger(numberoffiles,1,thestring);
  2149.                 IF ((numberoffiles > 10) AND (numberoffiles < 100)) THEN
  2150.                   Concat(' ',thestring,rstr);thestring := rstr;END;
  2151.                 IF numberoffiles < 10 THEN
  2152.                   Concat('  ',thestring,rstr);thestring := rstr;END;
  2153.                    (*dltobspec^.ptext := ADR(thestring);*)
  2154.                    tree6ptr^[numtocpy + 1].spec^.ptext := ADR(thestring);
  2155.              ObjectDraw(tree6ptr,numtocpy,1,x,y,w,h);END;
  2156.              GEMDOS.SNext(result);
  2157.            UNTIL result < 0;
  2158.            GrafMouse(Arrow,NIL);
  2159.   ELSE
  2160.      showit := FormAlert(1,'[1][File not Found!][OK]');
  2161.   END; (* IF ELSE *)
  2162.   ObjectChange(tree1ptr,erase,0,x,y,w,h,Normal,1);         
  2163.   tempstr := pathstr;
  2164.   Delete(tempstr,0,2);
  2165.   ClearArray;
  2166.   MakeArray(tempstr);
  2167.   Directory;
  2168.   ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  2169.   ObjectDraw(tree1ptr,fwind,3,x,y,w,h);
  2170.   CalcSliderSize;
  2171.   ObjectChange(tree6ptr,dltdlgok,0,x,y,w,h,Normal,1);
  2172.   GetFreeSpace;
  2173.   ELSE
  2174.    ObjectChange(tree6ptr,dltdlgcl,0,x,y,w,h,Normal,1);
  2175.   END; (* IF ELSE *)
  2176.   
  2177.   IF confirmdlt THEN
  2178.       ObjectDraw(tree1ptr,filedlg,4,x,y,w,h);END;
  2179.   ELSE
  2180.     showit := FormAlert(1,'[1][No File(s) was Specified!][ OK ]');
  2181.     ObjectChange(tree1ptr,erase,0,x,y,w,h,Normal,1);
  2182.   END;    
  2183.       tree1ptr^[verify + 1].spec^.ptext := ADR(gverifystr);
  2184.       ObjectDraw(tree1ptr,verify,1,x,y,w,h);
  2185.      ObjectChange(tree1ptr,erase,0,x,y,w,h,Normal,1);
  2186.      ClearIt;
  2187.      ObjectChange(tree1ptr,fnametemp,0,x,y,w,h,Normal,1);
  2188. END ErasetheFile;
  2189.  
  2190. PROCEDURE CreateFolder;
  2191.   
  2192. VAR
  2193.    toobspec : etree;
  2194.    fname : POINTER TO String;
  2195.    currentname,drivepath,resultdrive,temp,resultpath,tempstr : String;
  2196.    where : CARDINAL;
  2197.    f,done :BOOLEAN;
  2198.    outfile : INTEGER;
  2199.    
  2200. BEGIN
  2201.   where := 0;
  2202.   fname := tree1ptr^[ftoname + 1].spec^.ptext;
  2203.   currentname := fname^;
  2204.   IF Length(currentname) > 0 THEN
  2205.      drivepath := CHR(ORD(defaultdrive) + ORD('A'));
  2206.      Concat(drivepath,':\',resultdrive);
  2207.      Concat(resultdrive,currentname,resultpath);
  2208.      IF Length(ffpath) > 4 THEN
  2209.         Copy(ffpath,0,Length(ffpath),temp);
  2210.         f := Pos(temp,'\*.*',0,where);
  2211.         Delete(temp,where,4);
  2212.         f := Pos(resultpath,':\',0,where);
  2213.         Insert(temp,resultpath,where + 1);
  2214.      END;
  2215.      GrafMouse(HourGlass,NIL);
  2216.      GEMDOS.Open(resultpath,0,outfile);
  2217.      IF outfile < 0 THEN
  2218.         IF NOT GEMDOS.DirCreate(resultpath) THEN
  2219.            GrafMouse(Arrow,NIL);
  2220.            showit := FormAlert(1,'[1][A Folder with that name|already exists!][OK]');
  2221.         ELSE
  2222.            tempstr := pathstr;
  2223.            Delete(tempstr,0,2);
  2224.            ClearArray;
  2225.            MakeArray(tempstr);
  2226.            Directory;
  2227.            ObjectDraw(tree1ptr,fwind,3,x,y,w,h);
  2228.            CalcSliderSize;
  2229.            GrafMouse(Arrow,NIL);END;
  2230.      ELSE
  2231.         GrafMouse(Arrow,NIL);
  2232.         showit := FormAlert(1,'[1][A File with that name|already exists!][ OK ]');
  2233.         done := GEMDOS.Close(outfile); 
  2234.      END; (* IF GEMDOS.Open *)     
  2235.   ELSE 
  2236.      showit := FormAlert(1,'[1][A folder name was|not specified!][ OK ]');
  2237.      END; 
  2238.   ObjectChange(tree1ptr,fcreate,0,x,y,w,h,Normal,1);   
  2239. END CreateFolder;  
  2240.  
  2241. PROCEDURE EraseFolder;
  2242.  
  2243. VAR
  2244.    toobspec : etree;
  2245.    fname : POINTER TO String;
  2246.    currentname,drivepath,resultdrive,resultpath,temp,rpath,tempstr
  2247.    ,match,amendpath : String;
  2248.    result,i : INTEGER;
  2249.    where,start,l : CARDINAL;
  2250.    f : BOOLEAN;
  2251.    fnrecord : pathrecord;
  2252.    addr : ADDRESS;
  2253.  
  2254. BEGIN
  2255.   fname := tree1ptr^[ftoname + 1].spec^.ptext;
  2256.   currentname := fname^;
  2257.   IF Length(currentname) > 0 THEN
  2258.   drivepath := CHR(ORD(defaultdrive) + ORD('A'));
  2259.   Concat(drivepath,':\',resultdrive);
  2260.   Concat(resultdrive,currentname,resultpath);
  2261.   IF Length(ffpath) > 4 THEN
  2262.      Copy(ffpath,0,Length(ffpath),temp);
  2263.      f := Pos(temp,'\*.*',0,where);
  2264.      Delete(temp,where,4);
  2265.      f := Pos(resultpath,':\',0,where);
  2266.      Insert(temp,resultpath,where + 1);
  2267.   END;
  2268.   addr := ADR(fnrecord);
  2269.   GEMDOS.SetDTA(addr);
  2270.   GrafMouse(HourGlass,NIL);
  2271.   Concat(resultpath,'\*.*',resultpath);
  2272.   GEMDOS.SFirst(resultpath,16,result);
  2273.   IF result >= 0 THEN
  2274.      match := '\*.*';
  2275.      IF Pos(resultpath,match,start,where) THEN
  2276.         Delete(resultpath,where,Length(resultpath) - where);
  2277.      ELSE
  2278.         match := '\';
  2279.         start := 0;
  2280.         where := 0;
  2281.         FOR i := 0 TO Length(resultpath) DO
  2282.             IF Pos(resultpath,match,start,where) THEN
  2283.                INC(start);END;
  2284.         END; (* FOR *)      
  2285.         Delete(resultpath,start,Length(resultpath) - start);
  2286.      END; (* IF ELSE *)   
  2287.      Concat(resultpath,'\',resultpath);        
  2288.      REPEAT
  2289.         Concat(resultpath,fnrecord.name,rpath);
  2290.         f := GEMDOS.Delete(rpath);
  2291.         GEMDOS.SNext(result);
  2292.      UNTIL result < 0;
  2293.      f := GEMDOS.DirDelete(resultpath);
  2294.      GrafMouse(Arrow,NIL);
  2295.   ELSE
  2296.      showit := FormAlert(1,'[1][ |File not Found!][OK]');
  2297.   END; (* IF ELSE *)         
  2298.   tempstr := pathstr;
  2299.   Delete(tempstr,0,2);
  2300.   ClearArray;
  2301.   MakeArray(tempstr);
  2302.   Directory;
  2303.   ObjectChange(tree1ptr,ferase,0,x,y,w,h,Normal,1);
  2304.   ObjectDraw(tree1ptr,fwind,3,x,y,w,h);
  2305.   CalcSliderSize;
  2306.   GetFreeSpace;
  2307.   ELSE
  2308.     showit := FormAlert(1,'[1][A folder name was|not specified!][ OK ]');
  2309.     END;
  2310. END EraseFolder;
  2311.  
  2312. PROCEDURE EraseOrCreate;
  2313.  
  2314. BEGIN
  2315.   IF GetObjectState(tree1,fcreate,Selected) THEN
  2316.      CreateFolder;
  2317.      ObjectChange(tree1ptr,fcreate,0,x,y,w,h,Normal,1);END;
  2318.   IF GetObjectState(tree1,ferase,Selected) THEN
  2319.      EraseFolder;
  2320.      ObjectChange(tree1ptr,ferase,0,x,y,w,h,Normal,1);END;
  2321.   ObjectChange(tree1ptr,fldok,0,x,y,w,h,Normal,1);   
  2322.   ClearIt;
  2323. END EraseOrCreate;  
  2324.  
  2325. PROCEDURE GetOptions;
  2326.  
  2327. VAR
  2328.    stx,sty,stw,sth,ewidth,eheight,xoff,yoff : INTEGER;
  2329.    copyyes,deleteyes : BOOLEAN;
  2330.    
  2331. BEGIN
  2332.       ObjectOffset(tree1ptr,fileopts,xoff,yoff);
  2333.       tree4ptr^[optdlg + 1].x := xoff;
  2334.       tree4ptr^[optdlg + 1].y := yoff;
  2335.       ewidth := tree4ptr^[optdlg + 1].width;
  2336.       eheight := tree4ptr^[optdlg + 1].height;
  2337.       stx := (xoff + ewidth) DIV 2;
  2338.       sty := (yoff + eheight) DIV 2;
  2339.       stw := 5;
  2340.       sth := 2;
  2341.       GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2342.       GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2343.       ObjectDraw(tree4ptr,optdlg,2,xx,yy,ww,hh);
  2344.       IF GetObjectState(tree4,cpyyes,Selected) THEN 
  2345.          copyyes := TRUE; ELSE copyyes := FALSE;END;
  2346.       IF GetObjectState(tree4,dltyes,Selected) THEN
  2347.          deleteyes := TRUE; ELSE deleteyes := FALSE;END;   
  2348.       showit := FormDo(tree4ptr,0);
  2349.       IF GetObjectState(tree4,conok,Selected) THEN
  2350.          IF GetObjectState(tree4,cpyyes,Selected) THEN
  2351.             confirmcopy := TRUE; ELSE confirmcopy := FALSE; END;
  2352.          IF GetObjectState(tree4,dltyes,Selected) THEN
  2353.             confirmdlt := TRUE; ELSE confirmdlt := FALSE; END;
  2354.          ObjectChange(tree4ptr,conok,0,x,y,w,h,Normal,0);   
  2355.       END; (* IF *)
  2356.       IF GetObjectState(tree4,concancl,Selected) THEN
  2357.          IF copyyes THEN 
  2358.             ObjectChange(tree4ptr,cpyyes,0,x,y,w,h,selected,0);
  2359.             ObjectChange(tree4ptr,cpyno,0,x,y,w,h,Normal,0);
  2360.          ELSE
  2361.             ObjectChange(tree4ptr,cpyyes,0,x,y,w,h,Normal,0);
  2362.             ObjectChange(tree4ptr,cpyno,0,x,y,w,h,selected,0);END;
  2363.          IF deleteyes THEN 
  2364.             ObjectChange(tree4ptr,dltyes,0,x,y,w,h,selected,0);
  2365.             ObjectChange(tree4ptr,dltno,0,x,y,w,h,Normal,0);
  2366.          ELSE
  2367.             ObjectChange(tree4ptr,dltyes,0,x,y,w,h,Normal,0);
  2368.             ObjectChange(tree4ptr,dltno,0,x,y,w,h,selected,0);END;      
  2369.          ObjectChange(tree4ptr,concancl,0,x,y,w,h,Normal,0);
  2370.       END;            
  2371.       GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2372.       GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2373.       ObjectChange(tree1ptr,options,0,x,y,w,h,Normal,0);
  2374.       ObjectDraw(tree1ptr,fileopts,4,x,y,w,h);
  2375.       tree1ptr^[verify + 1].spec^.ptext := ADR(gverifystr);
  2376.       ObjectDraw(tree1ptr,verify,1,x,y,w,h);        
  2377. END GetOptions;
  2378.  
  2379. PROCEDURE ConfirmCopys;
  2380.  
  2381. VAR
  2382.    stx,sty,stw,sth,ewidth,eheight,xoff,yoff : INTEGER;
  2383.  
  2384. BEGIN
  2385.   ObjectOffset(tree1ptr,filedlg,xoff,yoff);
  2386.       tree5ptr^[copydlg + 1].x := xoff;
  2387.       tree5ptr^[copydlg + 1].y := yoff;
  2388.       ewidth := tree5ptr^[copydlg + 1].width;
  2389.       eheight := tree5ptr^[copydlg + 1].height;
  2390.       stx := (xoff + ewidth) DIV 2;
  2391.       sty := (yoff + eheight) DIV 2;
  2392.       stw := 5;
  2393.       sth := 2;
  2394.       GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2395.       GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2396.       ObjectDraw(tree5ptr,copydlg,2,xx,yy,ww,hh);
  2397.       showit := FormDo(tree5ptr,0);
  2398.       IF GetObjectState(tree5,condlgcl,Selected) THEN
  2399.          GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2400.          GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);END;
  2401.       ObjectChange(tree5ptr,condlgcl,0,x,y,w,h,Normal,0);   
  2402.       ObjectChange(tree1ptr,options,0,x,y,w,h,Normal,0);
  2403. END ConfirmCopys;
  2404.  
  2405. PROCEDURE ConfirmDeletes;
  2406.  
  2407. VAR
  2408.    stx,sty,stw,sth,ewidth,eheight,xoff,yoff : INTEGER;
  2409.  
  2410. BEGIN
  2411.   ObjectOffset(tree1ptr,filedlg,xoff,yoff);
  2412.       tree6ptr^[dltdlg + 1].x := xoff;
  2413.       tree6ptr^[dltdlg + 1].y := yoff;
  2414.       ewidth := tree6ptr^[dltdlg + 1].width;
  2415.       eheight := tree6ptr^[dltdlg + 1].height;
  2416.       stx := (xoff + ewidth) DIV 2;
  2417.       sty := (yoff + eheight) DIV 2;
  2418.       stw := 5;
  2419.       sth := 2;
  2420.       GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2421.       GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2422.       ObjectDraw(tree6ptr,copydlg,2,xx,yy,ww,hh);
  2423.       showit := FormDo(tree6ptr,0);
  2424.       IF GetObjectState(tree6,dltdlgcl,Selected) THEN
  2425.          GrafShrinkBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);
  2426.          GrafGrowBox(stx,sty,stw,sth,xoff,yoff,ewidth,eheight);END;
  2427.       ObjectChange(tree6ptr,dltdlgcl,0,x,y,w,h,Normal,0);   
  2428.       ObjectChange(tree1ptr,options,0,x,y,w,h,Normal,0);
  2429. END ConfirmDeletes;
  2430.  
  2431. PROCEDURE CheckDrivesAvail;
  2432.  
  2433. BEGIN
  2434.   FOR d := 0 TO 15 DO
  2435.       ObjectChange(tree1ptr,drivea + d,0,x,y,w,h,disabled,0);
  2436.   END;
  2437.   drv := DriveMap();
  2438.     FOR d := 0 TO 15 DO
  2439.         IF d IN drv THEN
  2440.                 ObjectChange(tree1ptr,drivea + d,0,x,y,w,h,Normal,0);END;
  2441.     END; (* FOR *)                       
  2442. END CheckDrivesAvail;
  2443.   
  2444. PROCEDURE SelectDrive;
  2445.  
  2446. BEGIN
  2447.   ObjectChange(tree1ptr,drivea + INTEGER(defaultdrive),0,x,y,w,h,selected,0);
  2448. END SelectDrive;
  2449.  
  2450. PROCEDURE LoadResource;
  2451.  
  2452. CONST 
  2453.    CRFilename = ':\THEACCC.RSC';
  2454.    MRFilename = ':\THEACCM.RSC';
  2455. VAR 
  2456.    rname,pathdrive,path : String;
  2457.    
  2458. BEGIN
  2459.   GEMDOS.GetDrv(defaultdrive);
  2460.   pathdrive := CHR(ORD(defaultdrive) + ORD('A'));
  2461.   IF resolution = 1 THEN
  2462.      rname := CRFilename;
  2463.   ELSE
  2464.      rname := MRFilename;
  2465.   END;   
  2466.   Concat(pathdrive,rname,path);
  2467.   ResourceLoad(path);
  2468.   IF AESCallResult = 0 THEN
  2469.      loaded  := FALSE; ELSE loaded := TRUE; END;
  2470. END LoadResource;
  2471.                           
  2472. PROCEDURE Initialize;
  2473.  
  2474.   VAR
  2475.      fromobspec : etree;
  2476.      path,blank : String;
  2477.      objflagsint,x,y,w,h,showit,objstate,objtype,objx,objy,
  2478.      xoff,yoff : INTEGER;
  2479.      objflags : BITSET;
  2480.      
  2481. BEGIN
  2482.   blank := '';
  2483.   sectorspertrack := 9;
  2484.   fcount := 12;
  2485.   count := 0;
  2486.   tracksperdisk := 79;
  2487.   nine := 1;
  2488.   ResourceGetAddr(0,tree1,tree1ptr);
  2489.   ResourceGetAddr(0,tree2,tree2ptr);
  2490.   ResourceGetAddr(0,tree3,tree3ptr);
  2491.   ResourceGetAddr(0,tree4,tree4ptr);
  2492.   ResourceGetAddr(0,tree5,tree5ptr);
  2493.   ResourceGetAddr(0,tree6,tree6ptr);
  2494.   initialized := FALSE;
  2495.   clearfirst := TRUE;
  2496.   tree1ptr^[ftrack + 1].width := 82;
  2497.   tree1ptr^[fslider + 1].width := 80;
  2498.   tree1ptr^[fslider + 1].x := tree1ptr^[ftrack + 1].x + 1;
  2499.   SuperExec(PROC(GetVerifyFlag));
  2500.   vint := INTEGER(verifyflag);
  2501.   DoVerify;
  2502.     CheckDrivesAvail;
  2503.     GEMDOS.GetDrv(defaultdrive);
  2504.     GEMDOS.SetDrv(defaultdrive,drivemap);
  2505.     fnametemp := fname2;       
  2506.     fffpath := '\*.*';
  2507.     ClearArray;
  2508.     MakeArray(fffpath);
  2509.     globlepath := fffpath;
  2510.     Directory;
  2511.     pathdrive := CHR(ORD(defaultdrive) + ORD('A'));
  2512.     Concat(pathdrive,':\*.*',presult);
  2513.     pathstr := presult;
  2514.     sourcepathstr := pathstr;
  2515.     tree1ptr^[ftoname + 1].spec^.ptext := ADR(blank);
  2516.     tree1ptr^[filename + 1].spec^.ptext := ADR(blank);
  2517.     CalcSliderSize;
  2518.     initialized := TRUE;
  2519.     confirmcopy := TRUE;
  2520.     confirmdlt := TRUE;
  2521.     therewasanerror := FALSE;
  2522.     index := 12;
  2523.     ObjectChange(tree1ptr,fset,0,x,y,w,h,Normal,0);
  2524. END Initialize;   
  2525.  
  2526. PROCEDURE EventLoop;
  2527.  
  2528. BEGIN
  2529.     CheckDrivesAvail;
  2530.     GEMDOS.GetDrv(appldrive);
  2531.     GEMDOS.SetDrv(defaultdrive,drivemap);
  2532.     SelectDrive;
  2533.     newwind := WindowCreate(0,0,0,640,200);
  2534.     FormCenter(tree1ptr,x,y,w,h);
  2535.     FormDialogue(1,0,0,0,0,x,y,w,h);
  2536.     WindowOpen(newwind,x,y,w,h);
  2537.     ObjectDraw(tree1ptr,0,5,x,y,w,h);
  2538.     tree1ptr^[verify + 1].spec^.ptext := ADR(gverifystr);
  2539.     ObjectDraw(tree1ptr,verify,1,x,y,w,h);
  2540.     GrafMouse(Arrow,NIL);
  2541.   REPEAT
  2542.     selobspec := etree(tree1ptr^[ftoname + 1].spec);  
  2543.     selection := selobspec^.ptext;
  2544.     (*selection := tree1ptr^[ftoname].spec^.ptext;*)
  2545.     selpathstr := selection^;
  2546.     selobspec^.ptext := ADR(selpathstr);
  2547. (*    tree1ptr^[ftoname + 1].spec^.ptext := ADR(selpathstr);*)
  2548.     
  2549.     IF GetObjectState(tree1,cpyscr,Selected) THEN
  2550.        sourcepathstr := pathstr;
  2551.        globlepath := fffpath; END;
  2552.     showit := FormDo(tree1ptr,ftoname);
  2553.     CASE showit OF
  2554.            format            : Formatdisk(tree1,fslider,tree1ptr);|
  2555.            drvfree           : GetFreeSpace;|
  2556.            verify            : DoVerify;|
  2557.            cpycopy           : CopyDiskorFile;|
  2558.            fspt              : Changespt;|
  2559.            fup               : ScrollUp;|
  2560.            fdown             : ScrollDown;|
  2561.            fname2..fname13   : MoveName(showit);|
  2562.            finfo             : FileInfo;|
  2563.            fset              : RenameOrSetAttrib;|
  2564.            fpath             : FilePath;|
  2565.            fprint            : HardCopy;|
  2566.            fnslider          : MoveSlider;|
  2567.            cpycancl          : CancelCopy;|
  2568.            fntrack           : Scroll12;|
  2569.            erase             : ErasetheFile;|
  2570.            fldok             : EraseOrCreate;|
  2571.            options           : GetOptions;|
  2572.            drivea..drivep    : SetTheDrive;|
  2573.     END; (* CASE *)
  2574.     
  2575.   UNTIL GetObjectState(tree1,mainexit,Selected); 
  2576.   WindowClose(newwind);
  2577.   WindowDelete(newwind);    
  2578.   FormDialogue(2,0,0,0,0,x,y,w,h);
  2579.   ObjectChange(tree1ptr,mainexit,0,x,y,w,h,Normal,0);
  2580.   GEMDOS.SetDrv(appldrive,drivemap);
  2581. END EventLoop;
  2582.     
  2583. BEGIN
  2584.   SETREG(15,ADR(stack[stacksize]));      
  2585.   apid := ApplInitialise();
  2586.   accname := '  The Accessory';
  2587.   menuid := MenuRegister(apid,accname);
  2588.   resolution := GetResolution(); 
  2589.      IF apid >= 0 THEN
  2590.         IF resolution # 0 THEN LoadResource; END;
  2591.         IF loaded THEN Initialize ;END;
  2592.         WHILE TRUE DO
  2593.            event := EventMultiple(MesageEvent,0,0,0,0,0,0,0,0,0,0,0,0,0,
  2594.                                    ADR(pbuffer[0]),
  2595.                                    0,0,dummy,dummy,dummy,dummy,dummy,
  2596.                                    dummy);
  2597.            IF (event = MesageEvent)  THEN
  2598.               IF resolution # 0 THEN
  2599.                IF  loaded THEN
  2600.                   CASE pbuffer[0] OF
  2601.                      40 : EventLoop;
  2602.                   END;(* CASE *)
  2603.                ELSE
  2604.                   CASE pbuffer[0] OF
  2605.                     40 : showit := FormAlert(1,'[1][Resource File not Loaded!][ OK ]');
  2606.                   END;(* CASE *)
  2607.                END; (* IF loaded *)
  2608.               ELSE
  2609.                   CASE pbuffer[0] OF
  2610.                     40 : showit := FormAlert(1,'[1][This accessory operates|in only medium or|high resolution!][ OK ]'); 
  2611.                   END; (* CASE *)
  2612.               END; (* IF resolution *)      
  2613.            END; (* IF event *)                    
  2614.         END; (* WHILE *)                         
  2615.      END; (* IF apid *)   
  2616. END TRYIT.
  2617.  
  2618.